Замените один объект 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)

таким образом, вы можете переопределить целевой объект с полями и методами источник и также сохраните ссылку на целевые объекты.