@Stepan1998

Как отслеживать смену значений в объекте?

Как повесить функцию на событие смены какого-либо значения в объекте?
Например, есть
const obj = { name: 'Boris', age: 5}
И если мы где-то сделаем obj.name = 'Stepan', то вызвалась функция
  • Вопрос задан
  • 132 просмотра
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Заворачиваете свой объект в Proxy:

const obj = {
  a: 69,
  b: 187,
  c: 666,
};
    
const proxy = new Proxy(obj, {
  set(target, key, val) {
    console.log(`${key} changed from ${target[key]} to ${val}`);
    target[key] = val;
    return true;
  },
});

Дальше вместо исходного объекта работаете с экземпляром Proxy.
Ответ написан
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Есть два основных варианта:
1) Использовать get и set
2) использовать Proxy
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
const obj = { name: 'Boris', age: 5};

// переназначить свойство с геттерами и сеттерами
// ниже очччень сокращённый пример
Object.defineProperty(obj, "name", {
  set(newName) {
    console.log("Name changed to", newName);
  }
});

// проверяем:
obj.name = "Toster"; // в консоль выведет "Name changed to Toster"
на деле нужно сохранить начальное значение, где-то хранить значение свойства name, и добавить геттер. Т.к. вероятно, не единственное свойство захочется так подменить, лучше будет воспользоваться «оптовым» Object.defineProperties() или в цикле по свойствам объекта каждое сделать реактивным интерактивным.

Подробнее см. примеры для Object.defineProperty()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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