Javascript new 关键字不重置所有属性

标签 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/

最佳答案

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

如果您希望每个用户都有一个单独的 role 对象,您必须在构造函数中(或至少在某个地方)对其进行初始化:

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

关于Javascript new 关键字不重置所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400812/

相关文章:

javascript - 调整大小时,右侧 div 的边距应与左侧文本区域宽度匹配

java - 抽象类中的通用实例变量

java - 如何更新不可变对象(immutable对象)中的字段

Swift - 从 GADBannerView 扩展后出现无法识别的选择器错误

c++ - 需要有关类(class)的帮助

javascript - 无论缩放、滚动、大小如何,鼠标在子元素中的位置

javascript - 具有 8 个不同值集的对象

javascript - Lodash mixin 无法在 JavaScript 类中工作

javascript - 带有 node.js 0.10 的 UDP 套接字上的 ENOTFOUND 错误

c++ - 彼此组成的类