简体   繁体   English

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

[英]Replace a one javascript object with another object

On page load I am creating two Javascript Objects, objDemo1 and objDemo1Backup where the latter is simply an exact copy of the first.在页面加载时,我创建了两个 Javascript 对象, objDemo1objDemo1Backup ,其中后者只是第一个的精确副本。

eg例如

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}

I can modify the values in sub_ as well as add / delete new sub_ 's but the only object I am editing is objDemo1 .我可以修改sub_的值以及添加/删除新的sub_ ,但我正在编辑的唯一对象是objDemo1 ie I never change objDemo1Backup即我从不改变objDemo1Backup

I have a reset button that when clicked will reset objDemo1 back to what it was when the page originally loaded (ie objDemo1 = objDemo1Backup ).我有一个重置按钮,单击该按钮会将objDemo1重置回页面最初加载时的状态(即objDemo1 = objDemo1Backup )。 This is where I am having the issue..这是我遇到问题的地方..

How do I set objDemo1 to objDemo1Backup ?如何将objDemo1设置为objDemo1Backup

I have tried:我努力了:

objDemo1 = objDemo1Backup;

and

objDemo1 = null;
var objDemo1 = objDemo1Backup;

...as well as similar variations but nothing seems to work. ...以及类似的变化,但似乎没有任何效果。 Any ideas?有任何想法吗?

  • Note: I can confirm that at the point of resetting, objDemo1Backup is exactly the same as it was when I created it and objDemo1 has changed.注意:我可以确认,在重置时, objDemo1Backup与我创建时完全相同,并且objDemo1已更改。
  • My code is definetly hitting the "reset" functionality, where I've tried the objDemo1 = objDemo1Backup ... I just cannot figure out the syntax to replace the object.我的代码objDemo1 = objDemo1Backup使用“重置”功能,在那里我尝试了objDemo1 = objDemo1Backup ......我只是无法弄清楚替换对象的语法。

I'm using angularjs and it took me some time to find out how to copy an object to another object.我正在使用angularjs ,我花了一些时间才知道如何将一个对象复制到另一个对象。 Normally you'll get an objects clone by calling clone or here in angular copy :通常,您将通过调用clone或在 angular copy 中获得对象克隆:

var targetObj = angular.copy(sourceObj);

This gives you a new cloned instance (with a new reference) of the source object.这为您提供了源对象的新克隆实例(带有新引用)。 But a quick look into the docs reveals the second parameter of copy :但是快速查看文档会发现copy的第二个参数:

angular.copy(sourceObj, targetObj)

This way you can override a target object with the fields and methods of the source and also keep the target objects reference.通过这种方式,您可以使用源的字段和方法覆盖目标对象,保留目标对象的引用。

In JavaScript objects are passed by reference, never by value.在 JavaScript 中,对象是通过引用传递的,而不是通过值传递。 So:所以:

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

To get a copy, you must use a copy function.要获得副本,您必须使用复制功能。 JavaScript doesn't have one natively but here is a clone implementation: How do I correctly clone a JavaScript object? JavaScript 本身没有,但这里有一个clone实现: 如何正确克隆 JavaScript 对象?

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

You can use Object.assign .您可以使用Object.assign

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

It takes up two parameters: target and source .它需要两个参数: targetsource When function completes, all internals of target object will be appended with source one.当函数完成时, target对象的所有内部都将附加source一。

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

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