对象如何从JavaScript中的多个父项继承?原型继承和原型属性
我想到一个这样做:
Fruit.prototype = new Plant();
Fruit.prototype = new anotherPlant();
但会出现什么水果的原型属性(原型对象)被置到?它仍然是Fruit的原始Parent构造函数的原始Parent.prototype吗?
对象如何从JavaScript中的多个父项继承?原型继承和原型属性
我想到一个这样做:
Fruit.prototype = new Plant();
Fruit.prototype = new anotherPlant();
但会出现什么水果的原型属性(原型对象)被置到?它仍然是Fruit的原始Parent构造函数的原始Parent.prototype吗?
你不能。事实上,没有多少种语言支持多重继承。
所有你做的有中Fruit
的prototype
设置的Plant
一个实例,然后覆盖它与anotherPlant
一个实例。它和简单一样;
Fruit.prototype = new anotherPlant();
但是,不要忘记,JavaScript有一个继承链。使用上面的内容,如果anotherPlant
的原型为Plant
,则可以从两个对象继承。
function Plant() {
}
Plant.prototype.foo = 'foo';
Plant.prototype.baz = 'baz-a';
function AnotherPlant() {
}
AnotherPlant.prototype = new Plant();
AnotherPlant.prototype.bar = 'bar';
AnotherPlant.prototype.baz = 'baz-b';
var a = new AnotherPlant();
console.log(a.foo); // foo
console.log(a.bar); // bar
console.log(a.baz); // baz-b
JavaScript的继承与其他大多数语言不同,它使用原型继承,这意味着通过遵循用于创建实例的构造函数的prototype
属性,该语言确定函数的继承链(类别,类别,如果这使得它更容易)。
嗯....马特如果我也做Fruit.prototype = new Plant();我将原型属性(不是原型属性)设置为指向Plant.prototype因此,原型具有两个特征,即它用于定义子级继承的原型属性以及指向父级的原型属性。即它做同样的事情做两件事? – Tomatoes
@Tomatoes:如果你这样做,你会继承'Plant'的'foo'和'baz'属性。你期望发生什么? – Matt
srry我不清楚,我试图区分原型属性和原型属性,并试图找出Fruit.prototype = new Plant();它影响的声明。看起来像这样的一个陈述可能会做两件事。继承=继承Plant.prototype方法并指定Plant.prototype作为其原型对象(父指针)。 – Tomatoes
检查了这一点http://stackoverflow.com/questions/9163341/multiple-inheritance-prototypes-in-javascript – PSL