如何在构造函数上设置代理

我有一个这样的构造函数:

function a(p){
this.k=12;
this.f = p;
this.t = function(){};
}

现在说我用这个函数创建一个对象:

let obj = new a("tf");

我总是可以这样做来检查是否为对象分配了新属性:

obj = new Proxy(obj,{set:()=>{console.log("new property assigned!");return true;}})
//Now if i were to say
obj.property1 = 12
//It will log out "new property assigned!"

但是问题是,我必须对使用此构造函数创建的每个新对象执行此操作。 所以我想做的就是每当我创建一个这样的新对象时:

let newObj = new a();

我想自动设置代理。

我怎样才能做到这一点?

评论
  • 小不点er
    小不点er 回复

    您可以创建一个包装您的类的函数。例如。

    const proxyify = (Class, ...args) => {
       return new Proxy(new Class(...args), {
            set: () => {
                console.log('set');
                return true;
            }
       });
    }
    

    用法将是

    function Dog() {
        this.type = "Dog";
    }
    
    const ProxiedDog = proxify(Dog);
    
  • Oo晓oO
    Oo晓oO 回复

    编写一个工厂函数,在其中创建对象的新实例,同时还将代理添加到新创建的实例中。

    function proxyFactory(Class, ...args) {
      const instance = new Class(...args);
      return new Proxy(instance, {
        set: () => {
          console.log("new property assigned!");
          return true;
        }
      });
    }
    

    然后使用要应用的类和参数调用工厂函数。

    let newObj = proxyFactory(a, "tf");