Обнаружение изменений в глобальном объекте с помощью прокси

#javascript #proxy

Вопрос:

 const scopeHandler = {  set: function(obj, prop, value) {  console.log(`${prop} changed from ${obj[prop]} to ${value}`);  obj[prop] = value;  return true;  }  };  const scopeProxy = new Proxy(window.app, scopeHandler);  

Поэтому я пытаюсь обнаружить какие-либо изменения всякий app раз, когда меняется какой-либо из его дочерних app.reports элементов, но он ничего не регистрирует. Что я делаю не так?

Ответ №1:

Прокси-сервер будет отображаться только в том случае, если сам прокси-сервер является значением, которое «изменилось» позже (с помощью присвоения свойств или любых других ловушек, которые у вас есть).

Если у вас есть существующий объект, создайте для него оболочку прокси-сервера, а затем другие части приложения будут использовать существующий объект, вы не увидите, чтобы с прокси что-то происходило; другие части объекта должны были бы иметь Прокси-сервер вместо исходного объекта.

Здесь вы можете window.app переназначиться на Прокси-сервер, чтобы вместо этого другие ссылки на window.app теперь ссылались на Прокси-сервер.

 window.app = new Proxy(window.app, scopeHandler);