@mamaanarhiya

Что за фигня с приравниванием в js?

Что это за фигня такая?
Есть какой-то объект obj.
Пишу let anotherObj = obj.
Далее дописываю или меняю что-нибудь в anotherObj и оно же меняется в obj.
То есть допустим пишу anotherObj.tratata = 123. И в obj появляется свойство tratata равное 123.
  • Вопрос задан
  • 706 просмотров
Решения вопроса 2
Все нормально, просто объекты передаются ссылками, вам нужно создавать новый объект, если хотите управлять им независимо.

Например:
let anotherObj = Object.assign({}, obj)

Или более продвинутые методы отсюда underscorejs.org или его форка https://lodash.com/docs/4.17.4 (рекомендую), в последнем есть и рекурсивный merge может быть полезным, так же стоит помнить что assing не работает в IE 10-11
Ответ написан
Ptolemy_master
@Ptolemy_master
Не мешало бы немного ознакомиться с объектами в JavaScript. Когда вы "приравниваете" объекты, вы на самом деле приравниваете ссылки. То есть разные переменные указывают на один и тот же участок памяти. Для того, чтобы избежать этого поведения, следует использовать "клонирование". Делать это можно разными способами, от ручного (создаете вручную объект и приравниваете по очереди все поля от другого) до библиотечных, почти все либы jQuery, Angular etc. имеют функции клонирования.
Вот, по ссылке, почитайте https://stackoverflow.com/questions/728360/how-do-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы