Стандартный способ УСТАРЕЛО: Object.observe ()
Метод Object.observe () был , используемый для асинхронного наблюдения за изменениями объекта.Это обеспечило поток изменений в порядке, в котором они происходят.Однако этот API устарел и удален из браузеров.
let myObservdObject = Object.observe( { a : 'foo' }, e=>console.log('change!', e) );
myObservdObject.a = 'bee';
// callback gets executed
// and prints 'changed! in console, with the change event data
Но прокси-серверы прибыли в Стандарт (ES6), объект.Observe устарел и, как следствие, не поддерживается браузерами.
Прокси - это новый способ наблюдения ... но реализация универсального наблюдателя требует более сложной реализации по сравнению со способом, который нам предоставлял Object.observe.
Наблюдениеизменения значений в сторонних библиотеках
Вы можете найти множество реализаций, основанных на прокси.Некоторые из них реализуют шаблон Observer, который заставляет вас устанавливать или получать значения, используя определенные методы:
Наблюдать : https://www.npmjs.com/package/observe
// define your object
var object = {a:'bee'};
// generate an observer
var observer = observe(object);
// declare the onchange event handler
observer.on( 'change', change=> console.log(change) );
// ready!
// set the value of 'a' and see how the callback is executed...
observer.set('a', 'foo')
// get the new value
observer.get('a') // returns 'foo'
Вместо этого, другие библиотеки позволяют вам взаимодействовать со своими переменными более естественным образом:
WatchJS : https://github.com/melanke/Watch.JS/
// define your object
var object = {a:'bee'};
// generate an observer and declare de hadler
watch(object , "a" , e=>console.log(e) );
// ready!
// set the value of 'a' and see how the callback is executed...
object.a = 'foo';
// get the new value
object.a // returns 'foo'
Мой собственный apprach: deep-observer
Все реализации имеют свои собственные предостережения, и ни одна из них не работала для моих целей, поэтому мне пришлось реализовать свой собственный подход.
В результате получился высоко настраиваемый метод Observer сочень маленькая занимаемая площадь (<100 байт в сжатом виде) </p>
Глубокий наблюдатель : https://www.npmjs.com/package/deep-observer
// create an observable object
const myObserved = new Observer( { a : 'bee' } , e=>console.log(e) ),
// perform a modification
myObserved.a = 'foo';
// console : { action:'update', oldValue:'bee', object:{a:'foo'}, name:'a' }
myObserved.a; // returns 'foo'