Замените один объект 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
в objDemo1Backup
?
Я пробовал:
objDemo1 = objDemo1Backup;
И
objDemo1 = null;
var objDemo1 = objDemo1Backup;
...а также аналогичные вариации, но, похоже, ничего не работает. Есть идеи?
- Примечание: я могу подтвердить, что в момент сброса
- мой код определенно поражает функциональность "reset", где я пробовал
objDemo1 = objDemo1Backup
... Я просто не могу понять синтаксис, чтобы замените объект.
objDemo1Backup
точно такой же, как и при его создании, и objDemo1
изменился.
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, и мне потребовалось некоторое время, чтобы узнать, как скопировать объект в другой объект. Обычно вы получаете клон объектов, вызывая clone или здесь в angular copy:
var targetObj = angular.copy(sourceObj);
Это дает вам новый клонированный экземпляр (с новой ссылкой) исходного объекта. Но быстрый взгляд в документы показывает второй параметр copy:
angular.copy(sourceObj, targetObj)
Таким образом, вы можете переопределить целевой объект с помощью полей и методов источника. и также сохраняют ссылку на целевые объекты.