@Stepan1998

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

Как повесить функцию на событие смены какого-либо значения в объекте?
Например, есть
const obj = { name: 'Boris', age: 5}
И если мы где-то сделаем obj.name = 'Stepan', то вызвалась функция
  • Вопрос задан
  • 137 просмотров
Решения вопроса 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, 'изменило своё значение с', target[key], 'на', 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()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 06:06
1500 руб./в час
22 нояб. 2024, в 06:04
1 руб./за проект
22 нояб. 2024, в 03:54
1500 руб./за проект