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

用另一个对象替换一个javascript对象,javascript,reset,javascript-objects,Javascript,Reset,Javascript Objects,在页面加载时,我创建了两个Javascript对象,objDemo1和objDemo1Backup,后者只是第一个对象的精确副本 e、 g 我可以修改sub\中的值,也可以添加/删除新的sub\,但我正在编辑的唯一对象是objDemo1。i、 e.我从不更改objDemo1Backup 我有一个重置按钮,单击该按钮将重置objDemo1,使其恢复到最初加载页面时的状态(即objDemo1=objDemo1Backup)。这就是我的问题所在 如何将objDemo1设置为objDemo1Backup

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

e、 g

我可以修改
sub\
中的值,也可以添加/删除新的
sub\
,但我正在编辑的唯一对象是
objDemo1
。i、 e.我从不更改
objDemo1Backup

我有一个重置按钮,单击该按钮将重置
objDemo1
,使其恢复到最初加载页面时的状态(即
objDemo1=objDemo1Backup
)。这就是我的问题所在

如何将
objDemo1
设置为
objDemo1Backup

我试过:

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
      实现:

      我正在使用angularjs,我花了一些时间来了解如何将一个对象复制到另一个对象。通常,您将通过调用clone或此处的angular copy获得对象克隆:

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

      通过这种方式,您可以使用源的字段和方法覆盖目标对象,并且还可以保持目标对象引用。

      您可以使用


      它占用两个参数:
      target
      source
      。当函数完成时,
      target
      对象的所有内部都将附加
      一个。

      我假设发生的情况是,由于
      objDemo1
      objDemo1Backup
      都指向同一个对象,当您更改一个对象时,两者都会更改。这似乎不直观,但这是javascript的工作方式。谷歌“javascript克隆对象”获取更多详细信息。你在玩对象引用,而不是克隆它。您应该克隆对象,而不是使用=分配对象。因此,如果我想将objDemo重置为objDemoBackup是一个克隆点,我会这样做:
      objDemo=clone(objDemoBackup)是的,您必须再次克隆它,否则您将以一个引用结尾:)正是我要找的。我不知道
      角度。copy
      可以拍摄目标物体。谢谢这个问题中没有AngularJS标记。不完全是,它是一个合并而不是替换。在链接中的MDN示例中,更新的目标具有属性“a”,而源没有。在OP的示例中,属性具有相同的名称,因此这不是问题。@AlienTechnology声明Object.assign不会创建新实例
      objDemo1 = null;
      var objDemo1 = objDemo1Backup;
      
      var objDemo, objDemoBackup;
      objDemo = {
          sub_1: "foo";
      };
      objDemoBackup = objDemo;
      objDemo.sub_2 = "bar";
      console.log(objDemoBackup.sub_2);   // "bar"
      
      var objDemo, objDemoBackup;
      objDemo = {
          sub_1: "foo";
      };
      objDemoBackup = clone(objDemo);
      objDemo.sub_2 = "bar";
      console.log(objDemoBackup.sub_2);   // undefined
      
      var targetObj = angular.copy(sourceObj);
      
      angular.copy(sourceObj, targetObj)
      
      ObjectConstructor.assign(target: T, source: U): T & U