1
看看代码下面。我会除了输出将是123-admin 0-null。但相反,它的123管理员0管理员。你能解释一下为什么新的关键字不能取代整个用户对象吗?Javascript新的关键字不重置所有属性
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/
但id属性更改为0后的第二个新而角色没有改变。有什么区别? –
@NatanRubinstein区别在于“id”属性是*直接*每个'User'实例的属性。您设置的“名称”属性不是 - 它是(共享)“角色”属性的属性。 “角色”在原型对象上,因此被所有实例共享。 – Pointy
@NatanRubinstein当你做一个对象属性赋值时,比如'user.id = 123;'* always *直接将属性放在对象上,即使原型上已经有一个类似命名的属性。换句话说,你不能通过实例直接分配给原型属性*。但是,您可以*为原型上的共享对象的属性赋值。这是最后一个''。 – Pointy