【发布时间】:2016-10-07 07:38:19
【问题描述】:
在Mozilla documentation page 的中间它切换(没有足够清楚的解释)示例来自
WorkerBee.prototype = Object.create(Employee.prototype);
到
WorkerBee.prototype = new Employee;
第二种形式new Employee 将使用应该只存在于WorkBee 实例中的属性来初始化WorkBee 的原型。
为什么在这么多 JavaScript 继承示例中使用第二种形式? 给继承的属性和自己的属性赋予不同的状态不是不希望的吗?
WorkBee 中的 Employee 属性名称的状态与属性项目不同,因为名称是在 WorkBee.prototype.name 中定义的,而项目是在 WorkBee 实例中定义的。
一般来说,为什么有人会想要使用非抽象类 X 的构造函数来初始化 JavaScript 中派生类 Y 的原型?
在我看来,这两个构造函数都应该只用于初始化 X 和 Y 的实例,如果 Y 是从 X 派生的,那么构造函数 X 应该初始化 Y 的实例,而不是 Y 的原型。 但是如果 X 是抽象的,这意味着我们不希望有 X 的实例,那么只有这样我们才有可能使用 X 构造函数作为放置派生类原型初始化的地方。
【问题讨论】:
-
链接的文章其实has more problems不止于此
-
这篇文章说“它是 2015 年:那不应该是 MDN 的一部分。”,我只能补充它是 2016 年 10 月:那不应该是 MDN 的一部分。
-
这是一个 wiki - 请帮助 :-)
标签: javascript inheritance prototype instance new-operator