Замените один объект 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)
таким образом, вы можете переопределить целевой объект с полями и методами источник и также сохраните ссылку на целевые объекты.