用另一个对象替换一个 javascript 对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13937578/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Replace a one javascript object with another object
提问by Adam Tomat
On page load I am creating two Javascript Objects, objDemo1and objDemo1Backupwhere the latter is simply an exact copy of the first.
在页面加载时,我创建了两个 Javascript 对象,objDemo1而objDemo1Backup后者只是第一个的精确副本。
e.g.
例如
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. i.e. I never change objDemo1Backup
我可以修改中的值sub_以及添加/删除 new的值,sub_但我正在编辑的唯一对象是objDemo1. 即我从不改变objDemo1Backup
I have a reset button that when clicked will reset objDemo1back to what it was when the page originally loaded (i.e. objDemo1 = objDemo1Backup). This is where I am having the issue..
我有一个重置按钮,单击该按钮后将重置objDemo1为页面最初加载时的状态(即objDemo1 = objDemo1Backup)。这是我遇到问题的地方..
How do I set objDemo1to 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,
objDemo1Backupis exactly the same as it was when I created it andobjDemo1has changed. - 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.
- 注意:我可以确认在重置时,
objDemo1Backup它与我创建它时的完全相同并且objDemo1已经改变。 - 我的代码肯定会遇到“重置”功能,我已经尝试过
objDemo1 = objDemo1Backup......我只是无法弄清楚替换对象的语法。
采纳答案by Halcyon
In JavaScript objects are passed by reference, never by value. So:
在 JavaScript 中,对象是通过引用传递的,而不是通过值传递。所以:
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 cloneimplementation: 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
回答by schmijos
I'm using angularjsand it took me some time to find out how to copy an object to another object. Normally you'll get an objects clone by calling cloneor here in angular copy:
我正在使用angularjs,我花了一些时间才知道如何将一个对象复制到另一个对象。通常,您将通过调用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 andalso keep the target objects reference.
通过这种方式,您可以使用源的字段和方法覆盖目标对象,并保留目标对象的引用。
回答by ivanjermakov
You can use Object.assign.
您可以使用Object.assign.
ObjectConstructor.assign(target: T, source: U): T & U
It takes up two parameters: targetand source. When function completes, all internals of targetobject will be appended with sourceone.
它采用两个参数:target和source。当函数完成时,target对象的所有内部都将附加source一个。

