嵌套对象的更新,奇怪的行为

时间:2013-10-26 11:57:40

标签: javascript javascript-objects

我有两个对象。在我的代码中的某一点,我想要将第一个对象的副本存储在第二个对象中。

这么长时间一切正常。没有奇怪的部分。如果我对第一个对象进行任何更改,则对第二个对象应用相同的更改(这不是意图)。我猜那是因为两者之间的某种推理是肯定的。

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。 信息:“其他东西”

这可能很简单,但我无法理解它。 为什么会发生这种情况,如何防止呢?

2 个答案:

答案 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");