對象如何從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