繁体   English   中英

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

[英]Replace a one javascript object with another object

在页面加载时,我创建了两个 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使用“重置”功能,在那里我尝试了objDemo1 = objDemo1Backup ......我只是无法弄清楚替换对象的语法。

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

var targetObj = angular.copy(sourceObj);

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

angular.copy(sourceObj, targetObj)

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

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

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

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

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

您可以使用Object.assign

ObjectConstructor.assign(target: T, source: U): T & U

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM