Javascript 向JS对象添加属性

Javascript 向JS对象添加属性,javascript,object,Javascript,Object,我知道这可能是重复的,但我发现了许多与我类似的问题,但他们的答案并没有回答我的问题。例如,据我所知,这一页没有包含我问题的答案 这就是我所拥有的: var User=function(){ this.name=''; } User.prototype.password=''; //或 defineProperty(User.prototype,'password',{enumerable:true,configurable:true,writable:true}); console.log(新用

我知道这可能是重复的,但我发现了许多与我类似的问题,但他们的答案并没有回答我的问题。例如,据我所知,这一页没有包含我问题的答案

这就是我所拥有的:
var User=function(){
this.name='';
}
User.prototype.password='';
//或
defineProperty(User.prototype,'password',{enumerable:true,configurable:true,writable:true});

console.log(新用户());//用户{name:”“}
如果您想使用
new
操作符创建一个新对象,如果您不能再修改构造函数,这可能会很困难。据我所知,如果使用
new
操作符,构造函数是唯一可以定义实例变量的地方

如果要使用对象创建对象。创建类似于对象定义属性的对象:

var User = function() {
  this.name = '';
}

User.prototype.xyz = ''; // Add whatever you need to your prototype

var o = Object.create(User.prototype, {
    'password': {enumerable: true, configurable: true, writable: true, value: ''}
});
User.call(o);
如果需要在创建对象之前执行此操作,则可以始终将原始构造函数包装到另一个函数中:

var User = function() {
  this.name = '';
}

User.prototype.xyz = ''; // Add whatever you need to your prototype

var originalUser = User;

var User = function() {
    this.password = '';
    originalUser.call(this);
}

User.prototype = originalUser.prototype;

var o = new User();

我个人认为
对象。创建
版本更清晰,更不容易出错(特别是当您有多个属性要在不同时间添加时)。

不要将成员数据放在原型上。如果您这样做,那么该类型的所有实例对于该成员都将具有相同的值。因此,您的问题是如何使原型属性显示在控制台日志中?顺便说一下,它应该是
defineProperty(User.prototype,
。无论如何,我不明白您在原型上添加
密码
想要实现什么。它不需要像
名称
这样的实例属性,以便每个用户都可以不同吗?我想这就是问题所在:他希望他的
用户
函数后面有更多的实例属性呃,他已经定义了构造函数。这就是我在回答中试图解决的问题。当然,@nils。很抱歉不清楚这一点。控制台日志并不是问题的一部分。为了清楚起见,我更新了答案。这非常混乱。你正在定义一个构造函数,但不要使用它来创建对象,而是使用
Object.创建
,然后将构造函数作为常规函数调用,作为一种初始值设定项?然后在第二个示例中,您创建一个版本的User,然后用另一个版本覆盖它,然后将原型从一个版本复制到另一个版本--我完全不明白。我假设了几件事:1.他可能会想使用构造函数对于其他操作也是如此。2.他希望在使用
new
创建的对象中添加比他在构造函数中定义的更多的实例属性。他不希望在原型中添加这些属性,否则他的值将被所有实例覆盖–因此我希望尽可能地坚持使用他的代码。这是否会使有意义吗?我当然愿意接受改进建议。虽然这两种解决方案都有效,但我还没有决定使用哪一种。不过还是要谢谢你!