Object.prototype.watch () устарела, и здесь мы видим полифилл
Я написал код.
Object.defineProperty(Object.prototype, "watch", {
enumerable: false
, configurable: true
, writable: false
, value: function (prop, handler) {
let
oldval = this[prop],
newval = oldval,
getter = function () {
return newval;
},
setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
};
Object.defineProperty(this, prop,
{
get: getter,
set: setter
});
}
});
var o = { p: 1 };
o.watch('p', function (id, oldval, newval) {
console.log('o.' + id + ' changed from ' + oldval + ' to ' + newval);
return newval;
});
o.watch('p', function (id, oldval, newval) {
console.log('o.' + id + ' changed from ' + oldval + ' to ' + newval);
return newval;
});
o.p = 2;
o.p = 3;
Кажется, он не допускает многократного наблюдения / наблюдения для одного и того же объекта, однако во многих случаях мне нужно "привязать данные" из нескольких компонентов к одному и тому же свойству одного и того же объекта (экземпляра), и необходимо распространять изменение данных.
Есть ли способ изменить код выше?
Я знаю, что есть несколько библиотек и т. Д., Но мне нравится такой минимальный код, поэтому мне хотелось бы знать, какой код может разрешить многократную регистрацию Object.watch
для одного и того же объекта в JavaScript. \
Спасибо.