为什么这个原型字段优先于相同的对象字段

Why is this prototype field taking precedence over the same object field?

本文关键字:字段 对象 优先于 原型 为什么      更新时间:2023-09-26

我正在学习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.itemprototype.color属性。