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

Ada*_*mat 12 javascript reset javascript-objects

在页面加载,我创建了两个JavaScript对象,objDemo1objDemo1Backup其中后者仅仅是第一的精确副本.

例如

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}
Run Code Online (Sandbox Code Playgroud)

我可以修改值sub_以及添加/删除新sub_的但是我正在编辑的唯一对象是objDemo1.即我永远不会改变objDemo1Backup

我有一个重置按钮,单击该按钮将重置objDemo1为最初加载页面时的状态(即objDemo1 = objDemo1Backup).这是我遇到问题的地方..

如何设置objDemo1objDemo1Backup

我试过了:

objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)

objDemo1 = null;
var objDemo1 = objDemo1Backup;
Run Code Online (Sandbox Code Playgroud)

...以及类似的变化,但似乎没有任何工作.有任何想法吗?

  • 注意:我可以确认,在重置时,objDemo1Backup它与我创建它并objDemo1更改时完全相同.
  • 我的代码肯定会达到"重置"功能,我已经尝试了objDemo1 = objDemo1Backup...我只是无法弄清楚替换对象的语法.

sch*_*jos 13

我正在使用angularjs,我花了一些时间来找出如何将对象复制到另一个对象.通常你会通过调用clone或者在angular copy中获得一个对象克隆:

var targetObj = angular.copy(sourceObj);
Run Code Online (Sandbox Code Playgroud)

这将为您提供源对象的新克隆实例(带有新引用).但是快速查看文档会揭示复制的第二个参数:

angular.copy(sourceObj, targetObj)
Run Code Online (Sandbox Code Playgroud)

这样,您可以使用源的字段和方法覆盖目标对象,保留目标对象引用.

  • 这个问题中没有 AngularJS 标签。 (3认同)
  • 正是我在寻找什么.我不知道`angular.copy`可以拍摄目标物体.谢谢! (2认同)

Hal*_*yon 7

在JavaScript中,对象通过引用传递,而不是通过值传递.所以:

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = objDemo;
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // "bar"
Run Code Online (Sandbox Code Playgroud)

要获得副本,您必须使用复制功能.JavaScript本身没有,但这是一个clone实现:如何正确克隆JavaScript对象?

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = clone(objDemo);
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // undefined
Run Code Online (Sandbox Code Playgroud)