Javascript 两个不同的实例保持相同的值

Javascript 两个不同的实例保持相同的值,javascript,node.js,Javascript,Node.js,当我实例化一个类2次时,我遇到了一个问题。第二个实例仅当对象为 下面是一个简单的例子: var Test=function(){}; Test.prototype={ 您好:空, 您好:{ 哼:空,, 亚:零,, }, }; var testA=新测试(); testA.bonjour='Aaa'; testA.hello.hum='Bbb'; //返回“Aaa” 控制台日志(testA.bonjour); //返回“{hum'Bbb',ya:null}” log(testA.hello);

当我实例化一个类2次时,我遇到了一个问题。第二个实例仅当对象为

下面是一个简单的例子:

var Test=function(){};
Test.prototype={
您好:空,
您好:{
哼:空,,
亚:零,,
},
};
var testA=新测试();
testA.bonjour='Aaa';
testA.hello.hum='Bbb';
//返回“Aaa”
控制台日志(testA.bonjour);
//返回“{hum'Bbb',ya:null}”
log(testA.hello);
控制台日志(“”);
var testB=新测试();
//返回“null”->ok
console.log(testB.bonjour);
//返回“{hum'Bbb',ya:null}”->wtf?!
log(testB.hello)原型上的“hello”属性的值是对对象的引用。每个构造的实例都可以访问该引用,但只涉及一个对象。因此,通过一个实例对该对象所做的更改将从所有其他实例可见

您可以通过添加

console.log(testA.hello === testB.hello); // will log "true"
如果希望每个实例都有自己的“hello”对象,则必须在构造函数中分配属性

var Test = function() {
    this.hello = { hum: null, ya: null };
};
原型上的“hello”属性的值是对对象的引用。每个构造的实例都可以访问该引用,但只涉及一个对象。因此,通过一个实例对该对象所做的更改将从所有其他实例可见

您可以通过添加

console.log(testA.hello === testB.hello); // will log "true"
如果希望每个实例都有自己的“hello”对象,则必须在构造函数中分配属性

var Test = function() {
    this.hello = { hum: null, ya: null };
};

好的。事实上,这是完全合乎逻辑的,但我马上就发疯了Ty通常,当您使用原型时,您只想在原型上定义方法。假设您将更改每个实例的值,但不会更改其方法。ok。事实上,这是完全合乎逻辑的,但我马上就发疯了Ty通常,当您使用原型时,您只想在原型上定义方法。假设您将更改每个实例的值,但不会更改其方法。更改原型会影响使用该原型的所有实例。关于这方面的更多信息可以在这里找到:变异原型会影响使用该原型的所有实例。有关这方面的更多信息,请参见: