我正在学习Javascript原型,并试图理解为什么会发生这种情况。这是我的理解,当寻找一个属性的值,对象之前检查任何原型。什么时候,这个印"棕色"?
function Box(item) {
this.item = item;
}
Box.prototype.color = "brown";
Box.color = "blue";
var box = new Box(null);
console.log(box.color);
>>> brown
Box.color = "blue";
将属性赋给函数 Box
,而不是赋给该函数的实例。您可以通过运行console.dir(box)
和console.dir(Box)
来验证。
如果你想把属性分配给一个实例,你必须先创建这个实例:
Box.prototype.color = "brown";
var box = new Box(null);
box.color = "blue"
或者在构造函数中赋值:
function Box(item) {
this.item = item;
this.color = 'blue';
}
因为Box.color
是构造函数的属性,它永远不会被赋值给实例对象。初始化box
对象后,它只获得this.item
和prototype.color
属性。