我正在尝试理解以下代码片段:

var User = function() {};

User.prototype.attributes = {
  isAdmin: false
};

var admin = new User("Sam"),
  guest = new User("Bob");

admin.attributes.isAdmin = true;

alert(admin.attributes.isAdmin);
alert(guest.attributes.isAdmin);

其输出将为真(两次)
请帮助我理解概念。任何帮助深表感谢。
谢谢

最佳答案

您可以使用attributes的副本,因为通过寻址attributes,您将覆盖所有实例的值。



var User = function() {
        this.attributes = Object.assign({}, this.attributes);
    };

User.prototype.attributes = { isAdmin: false };

var admin = new User("Sam"),
    guest = new User("Bob");

admin.attributes.isAdmin = true;

console.log(admin.attributes.isAdmin);
console.log(guest.attributes.isAdmin);





Javascript具有一个属性,并查看它是否退出。如果不存在,那么它将在原型链中查找该属性是否存在。如果存在,则采用此值。

分配值也一样。

要获得更详细的视图,您可以访问Inheritance and the prototype chain

关于javascript - admin.attributes.isAdmin被分配了值。而guest.attributes.isAdmin没有分配任何东西。请让我明白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52698272/

10-14 05:56