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

例如

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
    

    07-24 18:04