在页面加载时,我创建了两个Javascript对象objDemo1
和objDemo1Backup
,其中后者只是第一个的精确副本。
e.g。
objDemo1 {
sub_1 = { something: 123, somethingElse: 321 },
sub_2 = { something: 456, somethingElse: 654 }
}
我可以修改sub_
中的值以及添加/删除新的sub_
,但我编辑的唯一对象是objDemo1
。即我永远不会改变objDemo1Backup
我有一个重置按钮,点击该按钮会将objDemo1
重置为最初加载页面时的状态(即objDemo1 = objDemo1Backup
)。这就是我遇到问题的地方..
如何将objDemo1
设为objDemo1Backup
?
我试过了:
objDemo1 = objDemo1Backup;
和
objDemo1 = null;
var objDemo1 = objDemo1Backup;
......以及类似的变化但似乎没有任何效果。 有什么想法吗?
objDemo1Backup
与我创建时完全相同,并且objDemo1
已更改。objDemo1 = objDemo1Backup
...我无法弄清楚替换对象的语法。答案 0 :(得分:13)
我正在使用 angularjs ,我花了一些时间来了解如何将对象复制到另一个对象。通常,您可以通过调用 clone 或在angular copy 中获取对象克隆:
var targetObj = angular.copy(sourceObj);
这为您提供了源对象的新克隆实例(带有新引用)。但是快速查看文档会显示 copy 的第二个参数:
angular.copy(sourceObj, targetObj)
通过这种方式,您可以使用源和的字段和方法覆盖目标对象,同时保持目标对象的引用。
答案 1 :(得分:7)
在JavaScript中,对象通过引用传递,而不是通过值传递。所以:
var objDemo, objDemoBackup;
objDemo = {
sub_1: "foo";
};
objDemoBackup = objDemo;
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2); // "bar"
要获得副本,您必须使用复制功能。 JavaScript本身没有,但这是clone
实现:How do I correctly clone a JavaScript object?
var objDemo, objDemoBackup;
objDemo = {
sub_1: "foo";
};
objDemoBackup = clone(objDemo);
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2); // undefined
答案 2 :(得分:0)
您可以使用Object.assign
。
ObjectConstructor.assign(target: T, source: U): T & U
它占用两个参数:target
和source
。函数完成后,target
对象的所有内部元素将被替换为source
。