0

我有两个对象。在我的代码中,我希望将第一个对象的副本存储在第二个对象中。

这么久一切正常。对奇怪的部分说不。如果我对第一个对象进行任何更改,则相同的更改将应用​​于第二个对象(这不是意图)。我想那是因为两者之间存在某种参照物。

说明问题的示例:

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

我希望它是:包含 => 项目:2,值:1。信息:“其他东西”

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

4

2 回答 2

1

您需要克隆对象“人”,而不是引用它。

有几种方法可以克隆对象,并且已经有著名的问答...

在 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");
于 2013-10-26T12:15:55.190 回答
1

将人员对象分配给 objSum.contain 时需要克隆它,否则您将分配对原始对象的引用。最简单的方法是使用jquery

var objSum = {
    contain: jQuery.extend({}, person);
};

或者

var objSum = {
    contain: jQuery.extend(true, {}, person);
};

如果人本身也包含对象

于 2013-10-26T12:10:21.677 回答