2

说我有以下内容:

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

任何人都知道为什么原型对象属性充当“静态”属性?

4

1 回答 1

3

关于car2.config.color

这是意料之中的,因为所有实例Car共享相同的原型,因此该原型的相同属性。所以当你改变一个时,你就改变了另一个。

事实上,这就是重点:例如,它可以让您为所有实例拥有一个独特的功能(原型最常用于功能),这样更便宜。

如果你想拥有 distinct config,不要将它附加到原型上,而是附加到实例上。

关于car2.color

你预料到了,所以也许我不需要解释它,但这就是发生的事情:

  • 当您不设置时car.color,读取该属性会查找原型链,直到找到具有该名称的属性,所以它返回'red'
  • 当你设置时car.color,通过相同的过程读取它,返回你设置的这个属性
于 2013-11-05T19:44:09.133 回答