在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构造函数作为初始化派生类原型的地方。
答案 0 :(得分:1)
为什么在如此多的JavaScript继承示例中使用第二种形式?
因为我们没有摆脱它,它一直在蔓延。有关历史记录,另请参阅here。
为继承的属性与自己的属性赋予不同的状态是不是不受欢迎吗?
是的,绝对。