首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有原型的原型继承?

没有原型的原型继承?
EN

Stack Overflow用户
提问于 2015-07-03 09:49:42
回答 3查看 435关注 0票数 7

我想我理解JS中的典型继承,但在编写代码以演示我的特定想法时遇到了困难。考虑一下这个极其简单的场景,其中Manager对象来自Employee对象:

代码语言:javascript
复制
function Employee()
{
    this.name = "Axel";
    this.dept = "R&D";
}

function Manager()
{
    Employee.call(this);
    this.reports = ["Report 1", "Report 2", "Report 3"];
}

console.log(new Manager());

产出如下:

代码语言:javascript
复制
Manager {name: "Axel", dept: "R&D", reports: Array[3]}

奇怪的是,在我看来,我们成功地展示了典型的继承。但是我们没有在任何地方使用prototype的事实让我感到不安。上面的代码肯定不是这么做的吗?

有人能提供一个例子来说明上述方法的失败吗?

(顺便说一句,示例来自正式的Mozilla文档,减去原型的设置:模型)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-03 10:19:57

我们在各种评论中一直在讨论这个问题,但我想举一个例子来帮助澄清问题。从原始代码开始:

代码语言:javascript
复制
function Employee()
{
    this.name = "Axel";
    this.dept = "R&D";
}

function Manager()
{
    Employee.call(this);
    this.reports = ["Report 1", "Report 2", "Report 3"];
}

console.log(new Manager());

我们也可以这样做:

代码语言:javascript
复制
function setEmployee( emp )
{
    emp.name = "Axel";
    emp.dept = "R&D";
}

function Manager()
{
    setEmployee( this );
    this.reports = ["Report 1", "Report 2", "Report 3"];
}

console.log(new Manager());

现在,我们还没有使用过.call().apply()或其他任何花哨的东西。Manager构造函数只是调用另一个函数,并将其this值直接作为参数传递。代码做的事情和以前完全一样。

我们可以更进一步:

代码语言:javascript
复制
function setEmployee( emp )
{
    emp.name = "Axel";
    emp.dept = "R&D";
}

function createManager()
{
    var emp = {};
    setEmployee( emp );
    emp.reports = ["Report 1", "Report 2", "Report 3"];
    return emp;
}

console.log(createManager());

现在我们不使用构造函数,甚至不使用this -我们只是显式地创建一个对象并在函数之间传递它,而代码仍然做同样的事情!

票数 2
EN

Stack Overflow用户

发布于 2015-07-03 09:54:20

代码语言:javascript
复制
new Manager() instanceof Manager
> true
new Manager() instanceof Employee
> false
票数 3
EN

Stack Overflow用户

发布于 2015-07-03 09:57:33

你并没有真正继承任何东西。您只是在给定对象上“应用”了一个函数。我认为许多函数式语言都能做到这一点。

继承用于继承,而不仅仅是在给定的对象上应用不相关的函数。

例如,在您的示例中,您没有介绍如何继承方法。例如,即使您试图通过代理实现方法继承,这并不意味着您继承了父继承。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31203739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档