我有两个对象。在我的代码中的某一点,我想要将第一个对象的副本存储在第二个对象中。
这么长时间一切正常。没有奇怪的部分。如果我对第一个对象进行任何更改,则对第二个对象应用相同的更改(这不是意图)。我猜那是因为两者之间的某种推理是肯定的。
Exampel说明了问题:
//First object
var person = {
value: 1,
item: 2
}
//Second object
var objSum = {
contain: person,
info: "other stuff"
}
//Apply change to first object
person.value = 55;
//Echoing second object
console.log(objSum);
alert("done");
日志输出: 包含=>项目:2,价值:55。 信息:“其他东西”
我希望它是: 包含=> item:2,值:1。 信息:“其他东西”
这可能很简单,但我无法理解它。 为什么会发生这种情况,如何防止呢?
答案 0 :(得分:1)
您需要在将对象分配给objSum.contain时克隆该对象,否则您将分配对原始对象的引用。最简单的方法是使用jquery:
var objSum = {
contain: jQuery.extend({}, person);
};
或
var objSum = {
contain: jQuery.extend(true, {}, person);
};
如果人本身也包含对象
答案 1 :(得分:1)
您需要克隆对象'person',而不是引用它。
克隆对象有几种方法,而且已经有着名的问答了......
What is the most efficient way to deep clone an object in JavaScript?
对于您的情况,使用JSON方法会没问题。
//First object
var person = {
value: 1,
item: 2
}
//Second object
var objSum = {
contain: JSON.parse(JSON.stringify(person)), //clone object
info: "other stuff"
}
//Apply change to first object
person.value = 55;
//Echoing second object
console.log(objSum);
alert("done");