Многократная регистрация Object.watch для одного и того же объекта в JavaScript - PullRequest
0 голосов
/ 06 ноября 2018

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. \

Спасибо.

...