有没有机会在代理中获得外部范围?

is there any chance to get the outer scope in Proxy?

我正在代理自定义 class 中的一个对象,我想在我的代理对象中访问同一 class 的方法和属性。可能吗?

我认为有一种方法可以绑定上下文,但它在应用、调用或绑定方面对我不起作用。

如有任何建议,我们将不胜感激!

class MyClass {
  constructor() {
    this.state = new Proxy(this.initialState, {
      set(target, prop, value) {
        // some logic goes here              
      }
    })
  }

  methodIneedToReach() {}

}

我需要它来构建代码并防止混乱。

要么将 this 的值存储在一个名为 that 的变量中,然后在 set 方法中使用 that.methodIneedToReach,或者更好的是,使用箭头set 的功能。由于 ,他们将使用周围的那个,在这种情况下,就是您的 class:

的实例
class MyClass {
  constructor() {
    this.state = new Proxy(this.initialState, {
      set: (target, prop, value) => {                     // set is an arrow function
        this.methodIneedToReach();                        // works because 'this' inside here points to your class
      }
    })
  }

  methodIneedToReach() {}
}

演示:

class MyClass {
  constructor() {
    this.initialState = { message: "Hello World!" };
  
    this.state = new Proxy(this.initialState, {
      set: (target, prop, value) => {
        this.methodIneedToReach();
      }
    })
  }

  methodIneedToReach(value) {
    console.log("'methodIneedToReach' is called");
  }
}

let inst = new MyClass();
inst.state.message = "Bye world!";