Javascript 知道对象值何时被修改

Javascript Know when object value is modified

对于任何变量或其中的 属性,有没有办法知道它的值何时设置?

例如,假设我有:

let x = { 'a': 1, 'b': 2 };
// x.a's set operation is linked to a method
x.a = 3; // the method is automatically called

有什么方法可以在 a 的值发生变化时调用函数吗?许多代码会改变这个值;我不想到处添加方法调用。

我知道代理,但使用它们似乎需要一个单独的变量。意思是,x 不能是它自己的代理。

此技术最好适用于原始和非原始。

To be honest, use Proxy if you can

如果你真的不会使用 Proxy,你可以使用 setter 和 getter 来实现

虽然它确实意味着重新声明您的原始 x 对象,但我认为它是内联声明的,就像您问题中的最小、完整和可验证的示例

let x = {
  _a: 1,
  _b: 2,
  get a() {
    return this._a;
  },
  get b() {
    return this._b;
  },
  set a(value) {
    console.log(`changing a from ${this._a} to ${value}`);
    this._a = value;
  },
  set b(value) {
    console.log(`changing b from ${this._b} to ${value}`);
    this._b = value;
  }
};
x.a = 3;

x can't be a proxy of itself

当然可以。您可以通过简单地执行

来更改变量以指向代理
x = new Proxy(x, handler)

原始示例:

const handler = {
  set: function(obj, prop, value) {
    console.log('setting prop: ', prop, ' to ', value)
    obj[prop] = value;
    return true;
  }
};

let x = { 'a': 1, 'b': 2 };

x = new Proxy(x, handler);

x.a = 3; // the method is automatically called