Задать вопрос
meteorlake
@meteorlake
Кодю код, админю домашний сервер с фильмами

Как сделать proxy ловушку для добавления в массив внутри объекта?

Код максимум упростил для понятности
let threads = {
    max: 50,
    used: 0,
    waiting: []
}

threads = new Proxy(threads, {
    set(target, prop, val) {
        console.log('Изменение')
        return true
    }
})

threads.max = 100 // срабатывает
threads.waiting.push({ name: 'example' }) // не срабатывает


При попытке назначения max или used ловушка срабатывает или если попробовать назначить threads.waiting = значение, но при методе push - ничего не происходит. Почему?
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Потому, что сам массив waiting не заменяется. Остаётся каким был.
Вызывается лишь его какой-то там метод.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@foxjkeeWOW
let media = {};
media['value'] = [];

const proxyMedia = new Proxy(media, {
  get(target, property) {
    if (property === 'value') {
      return new Proxy(target[property], {
        set(obj, prop, value) {
          // Ловушка для отслеживания изменений в массиве
          console.log(`Изменение в массиве: ${value}`);
          obj[prop] = value;
          return true;
        }
      });
    }
    return target[property];
  }
});

proxyMedia['value'].push('string');
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы