Javascript代理,如何从目标内部触发陷阱

Javascript代理,如何从目标内部触发陷阱,javascript,proxy,Javascript,Proxy,在像这样的javascript中创建代理时 var t = function() { self = this; this.a = "abc"; someFunc: function () { self.a = "def"; } } target = new t(); var p = New Proxy(target, { set: function(){ //this will never be called when t

在像这样的javascript中创建代理时

var t = function() {
    self = this;
    this.a = "abc";
    someFunc: function () {
        self.a = "def";
    }
}

target = new t();

var p = New Proxy(target, {
  set: function(){
         //this will never be called when the someFunc changes the a field.
       }
})


p.someFunc();
设置的“陷阱”永远不会被称为我不难理解为什么会发生这种情况,但如何解决这种情况呢

一种解决方案是将自变量公开给外部,并让“某人”将其更改为代理,这对于任何使用t对象的人来说都不是很明显

还有别的办法吗?
我是否误用了代理?

解决方案是根本不使用
self

function T() {
    this.a = "abc";
    this.someFunc = function () {
        this.a = "def"; // `this` in the method (usually) refers to the proxy
    };
}

var p = new Proxy(new T, {
    set: function(target, key, value, receiver) {
        console.log(key, value);
        return Reflect.set(target, key, value, receiver);
    }
});
p.someFunc();

如果
someFunc
不使用代理,则在不重写
T

的情况下,无法强制使用代理“一种解决方案是将自变量暴露到外部”?添加一个
var
!并且还修复了所有其他语法错误,如
someFunc:
New
。这可能就是这里的“问题”,someFunc对代理一无所知,也不应该知道。我想这是代理概念的一部分。@PEtter好吧,是的,现在你的目标是什么?