猿问

Javascript知道何时修改对象值

对于任何变量或其属性,是否有办法知道何时设置其值?


例如,说我有:


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不能是其自身的代理。


优选地,该技术将与原始和非原始一起工作。


幕布斯7119047
浏览 167回答 2
2回答

POPMUISE

x不能成为其自身的代理当然可以。您只需执行以下操作即可将变量更改为指向代理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

小唯快跑啊

老实说,如果可以的话,请使用Proxy如果您真的不能使用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;
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答