JavaScript中在同一对象上多次注册“ Object.watch”

时间:2018-11-05 23:02:30

标签: javascript data-binding observable watch

Object.prototype.watch()已贬值,然后查看polyfill here

我写了一个代码。

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中的同一对象上多次注册。\ < / p>

谢谢。

0 个答案:

没有答案