用另一个对象替换一个javascript对象

时间:2012-12-18 16:43:56

标签: javascript reset javascript-objects

在页面加载时,我创建了两个Javascript对象objDemo1objDemo1Backup,其中后者只是第一个的精确副本。

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 ...我无法弄清楚替换对象的语法。

3 个答案:

答案 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

它占用两个参数:targetsource。函数完成后,target对象的所有内部元素将被替换为source