On page load I am creating two Javascript Objects, objDemo1
and objDemo1Backup
where the latter is simply an exact copy of the first.
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
. ie I never change 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
). This is where I am having the issue..
How do I set objDemo1
to objDemo1Backup
?
I have tried:
objDemo1 = objDemo1Backup;
and
objDemo1 = null;
var objDemo1 = objDemo1Backup;
...as well as similar variations but nothing seems to work. Any ideas?
objDemo1Backup
is exactly the same as it was when I created it and objDemo1
has changed.objDemo1 = objDemo1Backup
... I just cannot figure out the syntax to replace the object.I'm using angularjs and 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 clone or here in 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 :
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. 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?
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
.
ObjectConstructor.assign(target: T, source: U): T & U
It takes up two parameters: target
and source
. When function completes, all internals of target
object will be appended with source
one.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.