【问题标题】:Nodejs, observe class fields for changesNodejs,观察类字段的变化
【发布时间】:2018-07-18 22:20:40
【问题描述】:

是否可以为 nodejs 中的类属性创建直接代理观察者?

class User{
    constructor(name){
        this.name = name;
        let pObject = new Proxy(this,{
            set: () => {
                console.log("something changed"); // should be called
                return true;
            }
        })
        Object.assign(this, pObject) // something like this?
    }
}



let user = new User("Mike");
user.name = "Jack"

【问题讨论】:

  • 谢谢你们。这是我需要的。不能将 + 添加到代表 :(

标签: javascript node.js proxy


【解决方案1】:

您只想观察实例上的设置器吗?您可以返回代理本身:

class User {
  constructor(name) {
    this.name = name;
    let pObject = new Proxy(this, {
      set: (obj, prop, value) => {
        console.log("something changed"); // should be called
        return Reflect.set(obj, prop,value)      // set the property
      }
    })
    return pObject
  }
}



let user = new User("Mike");
user.name = "Jack"
user.state = "Alaska"
console.log(user)
console.log(user instanceof User)

【讨论】:

    【解决方案2】:

    Mark Meyer 已经回答了,这是我的看法(我迟到了几分钟才发这个):

    class User {
        constructor(name) {
            this.name = name;
            this.UserProxy = {
                set(object, prop, value) {
                    console.log('Object ', object);
                    console.log('Prop ', prop);
                    console.log('Value ', value);
                    // Do whatever you wish to 
                }
            };
            return new Proxy(this, this.UserProxy);
        }
    }
    
    let user = new User('Mike');
    user.name = 'Jack';
    user.name = 'Falcon';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2012-08-05
      相关资源
      最近更新 更多