@Danbka

Почему изменяется начальное содержимое объекта?

В качестве демонстрации - упрощенный код:

function myStore() {
  items = [];

  this.add = function(item) {
    items.push(item);
  };

  this.all = function() {
    return items;
  };
}

let store = new myStore;

console.log(store.all());

store.add('test');

console.log(store.all());


Ожидаю увидеть в консоли сначала пустой объект, затем - с одним элементом.
Однако в консоли оба объекта заполнены.

  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Когда вы нажимаете в консоли на стрелочку раскрытия объекта/массива, консоль только в этот момент пытается получить это значение (вызвать геттер). Если хотите видеть содержимое в момент вывода в консоль, то сериализируйте например в JSON
console.warn(JSON.stringify(store.all()))
Так вы сразу получите раскрытую строку.
Ответ написан
Комментировать
rockon404
@rockon404
Frontend Developer
Это корректное поведение консоли, так как отображается один и тот же объект.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
romasovest
@romasovest
~
Может немного не в тему, но правильно создавать экземпляр объекта (копирование объекта) через Object.assign

Например,

var obj = {a:1, b:2};
var obj2 = obj;
obj2.c = 3;
console.log(obj); // внезапно {a:1, b:2, c:3}
var obj3 = Object.assign({}, obj);
obj3.d = 4;
console.log(obj); // всё ок, d не появилось {a:1, b:2, c:3}


Хотя возможно вопрос был только в поведении консоли, тогда да нужно просто получать слепок с помощью сериализации (JSON.stringify)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект