为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript知道何时修改对象值

Javascript知道何时修改对象值

幕布斯7119047 2021-04-01 14:14:27
对于任何变量或其属性,是否有办法知道何时设置其值?例如,说我有:let x = { 'a': 1, 'b': 2 };// x.a's set operation is linked to a methodx.a = 3; // the method is automatically called当a的值更改时,有什么方法可以调用函数吗?许多代码将更改此值。我不想在各处添加方法调用。我知道代理,但要使用它们似乎需要一个单独的变量。意思是,x不能是其自身的代理。优选地,该技术将与原始和非原始一起工作。
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-04-08
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

老实说,如果可以的话,请使用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;


查看完整回答
反对 回复 2021-04-08
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信