JavaScript将代理getter/setter绑定到特定上下文

JavaScript将代理getter/setter绑定到特定上下文,javascript,proxy,Javascript,Proxy,这可能是一个没有解决方案的奇怪用例,但我很乐意听到关于如何解决它的任何答案 问题: 我有一个全局定义的代理: this.appState={} global.globalState=新代理(this.appState{ get:(目标、道具、接受者)=>{ console.log(this)/#3 返回Reflect.get(…参数) }, 设置:(对象、属性、值)=>{ console.log(this)/#2 obj[prop]=值 返回真值 } }) 在别的地方我有一门课: 导出默认类M

这可能是一个没有解决方案的奇怪用例,但我很乐意听到关于如何解决它的任何答案

问题:

我有一个全局定义的代理:

this.appState={}
global.globalState=新代理(this.appState{
get:(目标、道具、接受者)=>{
console.log(this)/#3
返回Reflect.get(…参数)
},
设置:(对象、属性、值)=>{
console.log(this)/#2
obj[prop]=值
返回真值
}
})
在别的地方我有一门课:

导出默认类MyClass{
构造函数(){
console.log(this)/#1
global.globalState[“问候”]=“嗨”
console.log(this.globalState[“greet”])
}
}

是否可以将类构造函数中的
this
绑定为代理的getter和setter中的
this
?因此,基本上,类构造函数的上下文需要从代理getter和setter的内部访问。

如果您的问题是是否正确的话

global.globalState["greet"] = "hi"
可以通过某种方式修改来更改代理get方法中的
this
,那么答案是否定的。箭头函数是词汇绑定的(因此它的
this
不能在不同调用之间更改),即使您使用常规函数,也无法通过指定属性来调用它,由于函数是由运行时调用的,并且代理是透明的,因此根本无法影响这一点(您甚至不知道该行调用setter)


要动态更改
,可以使用以下方法:

 let context = null;

 // inside the getter
 (function thisInjection() {

 }).call(context);

但是,这需要修改代理代码,在这种情况下,将
替换为
上下文
会更容易。

这两段代码是在同一个文件中吗?他们在同一个类中吗?因为我在第一篇文章中看到‘this’,它是否指向
MyClass
instance?@hackape这就是问题所在。。。如果可以将类绑定到代理
,则执行此操作。当前的是代理实例Yes sure。将代理创建包装到一个函数中,然后使用
new MyClass
@jonaswillms调用它这并不是我想要的。代理是在某种启动时全局创建的。它也可以从多个类访问,所以在特定类中创建它是不可行的。谢谢你的回答,我知道它是如何工作的。我只是想知道这是不可能的,因为我花了一些时间来破解它。