如何在构造函数内部包装使用Proxy构建的对象?

时间:2018-07-04 16:01:11

标签: javascript ecmascript-6 es6-class es6-proxy

我知道Proxy可用于更改对象级别的行为,例如方括号表示法get和set。我能找到的所有示例都显示了构造一个对象,然后用Proxy调用包装它。有没有一种方法可以使用ES6类构造函数表示法来定义类Foo,以使构造函数返回的对象已经包装在Proxy中,而不是构造函数的调用者也必须调用{分别{1}}?

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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')
}

答案 1 :(得分:-1)

据我所知:否,但是您可以随后设置prototype。像这样:

class Thing {

    constructor() {
        // ...
    }

}

Thing.prototype = new Proxy(Thing.prototype, {

    get(target, name) {
        // ...
    }

});