2个不同的实例保持相同的值

时间:2015-01-19 20:39:07

标签: javascript node.js

当我实例化一个类2次时,我遇到了问题。第二个实例仅在对象时保留第一个参数。

这是一个简单的例子:

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

var testA = new Test();
testA.bonjour = 'Aaa';
testA.hello.hum = 'Bbb';
// return "Aaa"
console.log(testA.bonjour);
// return "{ hum: 'Bbb', ya: null }"
console.log(testA.hello);

console.log('');

var testB = new Test();
// return "null" -> ok
console.log(testB.bonjour);
// return "{ hum: 'Bbb', ya: null }" -> wtf ?!
console.log(testB.hello);

有谁知道为什么? 谢谢。

1 个答案:

答案 0 :(得分:4)

原型上“hello”属性的值是对象的引用。每个构造的实例都可以访问该引用,但只涉及一个对象。因此,通过一个实例对该对象所做的更改将在所有其他实例中可见。

你可以通过添加

来看到这一点
console.log(testA.hello === testB.hello); // will log "true"

如果您希望每个实例拥有自己的“hello”对象,则必须在构造函数中分配该属性。

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