首页 > 解决方案 > 如何在构造函数中包装使用代理构造的对象?

问题描述

我知道这Proxy可用于更改对象级行为,例如括号表示法获取和设置。我能找到的所有示例都显示了构造一个对象,然后用Proxy调用包装它。有没有办法使用 ES6 类构造函数符号来定义一个类Foo,这样构造函数返回的对象已经被包装在Proxy,而不是构造函数的调用者也必须Proxy单独调用?

提前致谢。

标签: javascriptecmascript-6es6-classes6-proxy

解决方案


如果我正确理解了您的问题,那么您想要做的是在构造函数中返回一个像这样的新代理:

class MyClass {
  constructor() {
    return new Proxy(this, {
      // Proxy settings here
    })
  }
}

在此示例中,我们创建了一个新类,然后调用了一些属性。然后代理将打印出为简单起见调用的属性。

class MyClass {
  constructor() {
    return new Proxy(this, {
      get: (target, key) => {
        console.log('I am the key: ' + key)
        return Reflect.get(target, key)
      }
    })
  }
}

let c = new MyClass
c.awesome
c.billy
c.superTroopers

if (c instanceof MyClass) {
  console.log('I am an instance of MyClass')
} else {
  console.log('I am not an instance of MyClass')
}


推荐阅读