嵌套对象中的更新,奇怪的行为
Updates in nested objects, odd behavior
我有两个对象。在我的代码中的某一点,我希望将第一个对象的副本存储在第二个对象中。
只要一切正常。对奇怪的部分说不。如果我对第一个对象进行任何更改,则相同的更改将应用于第二个对象(这不是意图)。我想这是因为两者之间的某种参照是保留的。
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。信息:"其他东西"
我希望它是:包含 => 项:2,值:1。信息:"其他东西"
这可能很简单,但我无法理解它。为什么会发生这种情况,我该如何防止它
在将person-object分配给objSum.contain时,您需要克隆它,否则您将分配对原始对象的引用。最简单的方法是使用 jquery:
var objSum = {
contain: jQuery.extend({}, person);
};
或
var objSum = {
contain: jQuery.extend(true, {}, person);
};
如果人本身也包含对象
您需要克隆对象"person",而不是引用它。
有几种方法可以克隆对象,并且已经有著名的问题和答案......
在 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");
相关文章:
- 如何在 Firebase 的 Angular-Fire 中使用 $save() 来更新对象属性值
- Expressjs&集合中的MongoDB更新对象's数组
- Physijs更新对象质量
- 如何使用setAttribute更新对象中的一个值
- 在分析中创建或更新对象
- 从knockout.js中的下拉列表更新对象
- Grails richui自动完成将对象传递给函数或更新对象ID
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- 如何使用 AngularJS 根据选择更改更新对象数组
- 从新对象的属性更新对象的属性,但前提是新对象上的属性不是未定义的
- 角度.js从NG重复更新对象数据
- 删除 JavaScript 中的重复代码;更新对象传递到函数中
- javascript:通过递增 objectKeys 值来更新对象
- 根据输入更新对象数组
- 想要在回调中更新对象,给出正确的日志,但全局对象未更新
- 流星:如果值等于 X,则更新对象 1,否则更新对象 2
- 如何在 Javascript 中更新对象数组中每个对象的值
- 嵌套的 ng-repeat 不会更新对象
- 使用从 MongoDB 获取的新数据更新对象属性
- 按 $parent.$index 和$index更新对象$scope项