Замените один объект javascript другим объектом
при загрузке страницы я создаю два объекта Javascript,objDemo1
и objDemo1Backup
, где последний является точной копией первого.
например
objDemo1 {
sub_1 = { something: 123, somethingElse: 321 },
sub_2 = { something: 456, somethingElse: 654 }
}
я могу изменить значения в sub_
а также добавить / удалить новый sub_
но единственный объект, который я редактирую, это objDemo1
. то есть я никогда не меняюсь objDemo1Backup
у меня есть кнопка сброса, которая при нажатии будет сброшена objDemo1
вернемся к тому, что было, когда страница загружена изначально (т. е. objDemo1 = objDemo1Backup
). Этот вот где у меня проблема..
Как установить objDemo1
to objDemo1Backup
?
я пробовал:
objDemo1 = objDemo1Backup;
и
objDemo1 = null;
var objDemo1 = objDemo1Backup;
...а также аналогичные вариации, но ничего не работает. Есть идеи?
- Примечание: я могу подтвердить, что в момент сброса,
objDemo1Backup
точно так же, как это было, когда я создал его иobjDemo1
изменилось. - мой код определенно нажимает " сброс" функциональность, где я пробовал
objDemo1 = objDemo1Backup
... Я просто не могу понять синтаксис для замены объекта.
2 ответов
в 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
Я использую в AngularJS и мне потребовалось некоторое время, чтобы выяснить, как копировать объект в другой объект. Обычно вы получите клон объектов, позвонив клон или здесь в angular скопировать:
var targetObj = angular.copy(sourceObj);
это дает вам новый клонированный экземпляр (с новой ссылкой) исходного объекта. Но быстрый взгляд в документы показывает второй параметр скопировать:
angular.copy(sourceObj, targetObj)
таким образом, вы можете переопределить целевой объект с полями и методами источник и также сохраните ссылку на целевые объекты.