我正试图理解这段代码:
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);
其输出为真(两次)
请帮助我理解这个概念。任何帮助都表示赞赏。 谢谢
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:0)
在JS对象中通过引用传递。在您的示例中,admin
和guest
存储对同一对象attributes
的引用。您可以克隆对象(创建其值的副本)或将isAdmin
属性存储在prototype
中。