我对原型继承的概念比较陌生,所以也许这是原型继承应该如何工作,或者这只是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'对象被所有实例共享。只向应该共享的原型添加属性,所有*实例特有的*属于构造函数。 –