Javascript新关键字未重置所有属性

时间:2015-12-21 17:01:18

标签: javascript oop

请看下面的代码。我会除了输出将是123-admin 0-null。但相反,它的123-admin 0-admin。你能解释一下为什么new关键字不能替换整个用户对象吗?

function User()
{

}
User.prototype.id=0;
User.prototype.role={name:null}

var user = new User();
user.role.name = 'admin';
user.id = 123;
window.document.write(" "+user.id+"-"+user.role.name);
user = new User();
window.document.write(" "+user.id+"-"+user.role.name);

同样在JSFiddle中: https://jsfiddle.net/tfgx77au/6/

1 个答案:

答案 0 :(得分:5)

role属性位于原型上,因此该对象在使用构造函数创建的所有实例之间共享。

如果您想在每个用户上使用单独的role对象,则必须在构造函数中(或至少在某处)初始化该对象:

function User() {
  this.role = { name: null };
}