我想在变量中定义我的模型然后在数据对象(对象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
答案 0 :(得分:2)
dataObjectA[i] = model;
model
是底层对象的引用,因此您将引用放入字典中。因此,无论何时访问其中一个,都会获得相同的引用,因此也会获得相同的对象。只需在每次循环迭代中构建一个新对象:
dataObjectA[i] = { value: 0};
或者如果你想利用原型继承:
dataObjectA[i] = Object.create(model);
现在所有对象都不同,但它们从模型继承。
答案 1 :(得分:0)
当您将对象分配给未创建新对象的变量时,您正在处理Js中的对象引用,您只是referencing to the exiting object
您可以通过从模型中创建新对象来解决此问题。
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;