Определить, когда новое свойство добавляется в объект Javascript? - PullRequest
9 голосов
/ 05 мая 2010

Простой пример использования встроенного объекта JavaScript: navigator.my_new_property = "некоторое значение"; // можем ли мы обнаружить, что это новое свойство было добавлено?

Я не хочу постоянно опрашивать объект, чтобы проверить наличие новых свойств. Существует ли какой-либо тип установщика более высокого уровня для объектов вместо явного указания свойства для мониторинга?

Опять же, я не хочу определять, изменилось ли значение свойства, а скорее, когда добавляется новое свойство.

Идеи? спасибо

Ответы [ 2 ]

7 голосов
/ 05 мая 2010

Неа. Существующие методы определения, когда свойство записывается в:

  • сеттер ECMAScript 5, определенный с помощью defineProperty(obj, name, fn);
  • старый установщик JavaScript, определенный с помощью __defineSetter__(name, fn);
  • наследие Netscape / Mozilla watch(name, fn);

все они основаны на имени, поэтому не могут поймать новое свойство, записываемое с ранее неизвестным именем. В любом случае, navigator может быть «хост-объектом», поэтому вы не можете полагаться ни на один из обычных интерфейсов JavaScript Object, доступных на нем.

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

Аналогичная ситуация: Получатель / установщик в массиве javascript?

4 голосов
/ 05 августа 2017

ES6 представляет концепцию прокси: es6 прокси на MDN .

Вот простой пример:

let objectToSpy = {};
let handler = {
    set: (target, prop, value)=>{
        console.log('new prop:', prop);
        target[prop] = value;
    }
};

let proxy = new Proxy(objectToSpy,handler);
proxy.testProp = 'bla'; //prints: "new prop: testProp"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...