试图理解字典对象

时间:2018-04-06 13:03:38

标签: javascript dictionary

我想在变量中定义我的模型然后在数据对象(对象A)中使用它,但是当我这样做时,它重新使用相同的模型而不是创建一个新模型。似乎我在这里缺少一些基础知识。任何人都可以解释为什么它添加到对象A中的同一个对象?

var dataObjectA = {};
var dataObjectB = {};

var model = { value: 0 }
for(i = 0; i < 10; i++)
{
	dataObjectA[i] = model;
	dataObjectA[i].value++;
}


for(i = 0; i < 10; i++)
{
	dataObjectB[i] = { value: 0 }		
	dataObjectB[i].value++;
}	

console.log(dataObjectA); // all values: 10 --> how to make this all 1??
console.log(dataObjectB);// all values: 1
	

2 个答案:

答案 0 :(得分:2)

   dataObjectA[i] = model;

model是底层对象的引用,因此您将引用放入字典中。因此,无论何时访问其中一个,都会获得相同的引用,因此也会获得相同的对象。只需在每次循环迭代中构建一个新对象:

 dataObjectA[i] = { value: 0};

或者如果你想利用原型继承:

 dataObjectA[i] = Object.create(model);

现在所有对象都不同,但它们从模型继承

答案 1 :(得分:0)

当您将对象分配给未创建新对象的变量时,您正在处理Js中的对象引用,您只是referencing to the exiting object

您可以通过从模型中创建新对象来解决此问题。

&#13;
&#13;
var dataObjectA = {};
var dataObjectB = {};

var model = { value: 0 }
for(i = 0; i < 10; i++)
{
	dataObjectA[i] =  Object.assign({}, model);
	dataObjectA[i].value++;
}


for(i = 0; i < 10; i++)
{
	dataObjectB[i] = { value: 0 }		
	dataObjectB[i].value++;
}	

console.log(dataObjectA); // all values: 10 --> how to make this all 1??
console.log(dataObjectB);// all values: 1
&#13;
&#13;
&#13;