javascript — вызывает функцию, когда свойство устанавливается для объекта.

Вызов функции, когда свойство установлено для объекта

Если вы действительно настаиваете на сохранении test.hello = "world" для обнаружения изменений в существующих свойствах , вам придется подождать несколько лет, чтобы Object.watch стал частью следующего стандарта EcmaScript.

К счастью, вы можете сделать то же самое в EcmaScript 5, используя Object.defineProperty . Эли Грей сделал хороший Object.watch Object.watch, который можно назвать так:

 var test = {}; test.watch("hello", function(propertyName, oldValue, newValue) { console.log(propertyName   " has been set to "   newValue); }); test.hello = "world"; // triggers the watch handler 

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

К сожалению, поддержка браузеров ограничена современными браузерами, включая Internet Explorer 9, Firefox 4, Chrome, Opera 12 и Safari 5.

Если вы хотите вызвать обработчик при установке нового свойства , у вас возникнут еще большие проблемы. Лучшее, что вы можете сделать, это обернуть ваш объект в прокси и set ловушку. Затем вы можете определить, существует ли свойство уже, проверяя, this.getOwnPropertyDescriptor(name) ли this.getOwnPropertyDescriptor(name) значение «истинное». API-интерфейс Proxy очень экспериментален, и лишь несколько браузеров предоставляют прототипную реализацию для игры. Вам, вероятно, придется подождать некоторое время, чтобы получить законченный API с достойной поддержкой браузера.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector