在页面加载时,我正在创建两个Javascript对象objDemo1
和objDemo1Backup
,后者只是第一个的精确副本。
例如
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
...我只是无法弄清楚替换对象的语法。 最佳答案
在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