我對原型繼承的概念比較陌生,所以也許這是原型繼承應該如何工作,或者這只是javascript,但它似乎像原型繼承只是很好的主要類型。例如我有以下代碼:原型繼承中的奇怪行爲
var leg = {
type: null
};
var Animal = {
traits: {},
leg: Object.create(leg)
};
var lion = Object.create(Animal);
lion.traits.legs = 4;
lion.leg.type = 'left';
var bird = Object.create(Animal);
bird.traits.legs = 2;
bird.leg.type = 'right';
alert(lion.traits.legs) // shows 2???
alert(lion.leg.type) // shows right???
最後兩行顯示我的困惑。這真的是原型繼承應該如何工作,或者這只是如何實現它的JavaScript?
如果這確實是原型繼承應該如何工作,那麼我真的不明白這種類型的繼承會是多麼有用。如果我只能擁有原始類型,那麼在創建複雜對象時似乎非常有限,因爲有很多情況下我有一個對象存儲另一個對象的實例。
'traits'和'leg'對象被所有實例共享。只嚮應該共享的原型添加屬性,所有*實例特有的*屬於構造函數。 –