原型对象属性有奇怪的行为

时间:2013-11-05 19:42:31

标签: javascript prototype

说我有以下内容:

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

任何人都知道为什么原型对象属性充当了静态'特性

1 个答案:

答案 0 :(得分:3)

关于car2.config.color

这是预期的,因为Car的所有实例共享相同的原型,因此具有该原型的相同属性。因此,当您更改其中一个时,您将更改其他一个。

事实上,重点在于:例如,它可以为所有实例提供一个独特的功能(原型最常用于函数),这样更便宜。

如果您想要具有不同的config,请不要将其附加到原型而是附加到实例。

关于car2.color

你期待它,所以也许我不需要解释它,但这是发生的事情:

  • 当您未设置car.color时,读取该属性会查找原型链,直到找到具有该名称的属性,因此它返回'red'
  • 当您设置car.color时,通过相同的过程读取它,会返回您设置的此属性