为什么这个原型字段优先于同一个对象字段?

时间:2014-03-24 18:02:35

标签: javascript prototype

我正在学习Javascript原型并尝试理解为什么会这样。我的理解是,在查找属性的值时,在任何原型之前检查对象。那么,这打印“棕色”吗?

function Box(item) {
    this.item = item;
}

Box.prototype.color = "brown";
Box.color = "blue";

var box = new Box(null);
console.log(box.color);

>>> brown

2 个答案:

答案 0 :(得分:2)

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';
}

答案 1 :(得分:2)

因为Box.color是构造函数的属性,所以它永远不会分配给实例对象。初始化box对象后,它只会获得this.itemprototype.color属性。