我正在学习Javascript原型并尝试理解为什么会这样。我的理解是,在查找属性的值时,在任何原型之前检查对象。那么,这打印“棕色”吗?
function Box(item) {
this.item = item;
}
Box.prototype.color = "brown";
Box.color = "blue";
var box = new Box(null);
console.log(box.color);
>>> brown
答案 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.item
和prototype.color
属性。