Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nodejs, observe class fields for changes

Its possible to create direct proxy watchers for class properties in 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"
like image 215
NooneKnows Avatar asked May 07 '26 12:05

NooneKnows


2 Answers

Do you just want to observe setters on the instance? You can return the proxy itself:

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)
like image 79
Mark Avatar answered May 10 '26 02:05

Mark


Already answered by Mark Meyer, here was my take ( I am late by a few minutes to post this ) :

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';
like image 45
nerdier.js Avatar answered May 10 '26 01:05

nerdier.js



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!