说我有以下内容:
var Car = function() {
}
Car.prototype.config = {
color: 'red'
}
Car.prototype.color = 'red';
var car1 = new Car();
var car2 = new Car();
car1.config.color = 'green';
car1.color = 'green';
console.log(car2.config.color) //green but expected red
console.log(car2.color) //red as expected
任何人都知道为什么原型对象属性充当了静态'特性
答案 0 :(得分:3)
关于car2.config.color
:
这是预期的,因为Car
的所有实例共享相同的原型,因此具有该原型的相同属性。因此,当您更改其中一个时,您将更改其他一个。
事实上,重点在于:例如,它可以为所有实例提供一个独特的功能(原型最常用于函数),这样更便宜。
如果您想要具有不同的config
,请不要将其附加到原型而是附加到实例。
关于car2.color
:
你期待它,所以也许我不需要解释它,但这是发生的事情:
car.color
时,读取该属性会查找原型链,直到找到具有该名称的属性,因此它返回'red'
。car.color
时,通过相同的过程读取它,会返回您设置的此属性