我正在尝试理解以下代码片段:
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/