我对原型(prototype)继承的概念比较陌生,所以也许这就是原型(prototype)继承应该如何工作,或者这可能只是 javascript,但看起来原型(prototype)继承只是好的原始类型。例如我有以下代码:
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???
最后两行显示了我的困惑。这真的是原型(prototype)继承应该如何工作的,还是 javascript 就是这样实现的?
如果这确实是原型(prototype)继承应该如何工作的,我真的不明白这种类型的继承在大多数情况下会有什么用处。如果我只能拥有原始类型,那么在创建复杂对象方面似乎非常有限,因为在很多情况下我有一个对象存储另一个对象的实例。
最佳答案
不要继承非原始状态。继承方法。让每个对象都有自己的状态。状态使对象变得独一无二,如果所有对象共享相同的状态,那就没有意义了。
var Animal = {
method1: function() {},
method2: function() {}
};
var lion = Object.create(Animal, {
traits: {
value: {}
},
leg: {
value: {
type: null
}
}
});
var bird = Object.create(Animal, {
traits: {
value: {}
},
leg: {
value: {
type: null
}
}
});
顺便说一句,有一种更简洁且支持更好的语法来完成几乎相同的事情:
function Animal(traits, leg) {
this.traits = traits;
this.leg = leg;
}
var method = Animal.prototype;
method.method1 = function() {
};
method.method2 = function() {
};
var lion = new Animal({}, {type: null}),
bird = new Animal({}, {type: null});
关于javascript - 原型(prototype)继承中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108109/