为什么新的Parent()经常用于初始化子项的原型而不是Object.create(Parent.prototype)?

时间:2016-10-07 07:38:19

标签: javascript inheritance prototype instance new-operator

Mozilla documentation page的中间,它从

切换(没有足够清楚的解释)示例
WorkerBee.prototype = Object.create(Employee.prototype);

WorkerBee.prototype = new Employee;

第二种形式new Employee将使用应该仅存在于WorkBee实例中的属性初始化WorkBee的原型。

为什么在如此多的JavaScript继承示例中使用了第二种形式? 难道不希望为继承的属性和自己的属性赋予不同的状态吗?

WorkBee中的Employee属性名称的状态与属性项目不同,因为name在WorkBee.prototype.name中定义,而project在WorkBee实例上定义。

一般来说,为什么有人会想要使用非抽象类X的构造函数来初始化JavaScript中派生类Y的原型?

在我看来,两个构造函数只应该用于初始化X和Y的实例,如果Y是从X派生的,那么构造函数X应该初始化Y的实例,而不是Y的原型。 但是如果X是抽象的,这意味着我们不希望有X的实例,那么我们就可以使用X构造函数作为初始化派生类原型的地方。

1 个答案:

答案 0 :(得分:1)

  

为什么在如此多的JavaScript继承示例中使用第二种形式?

因为我们没有摆脱它,它一直在蔓延。有关历史记录,另请参阅here

  

为继承的属性与自己的属性赋予不同的状态是不是不受欢迎吗?

是的,绝对。