我正在使用代理myOutputPanel.getTxtOutput().setText("ABC");
方法。然后我尝试在函数上使用它并很快意识到我需要使用get
方法。这个简单的例子不起作用。它永远不会申请。
节点看起来支持应用https://node.green/#ES2015-built-ins-Proxy--apply--handler。不确定我做错了什么。
apply
我直接在var Foo = {
runme: function() {
return 1;
}
};
var Magic = {
Foo: Foo
};
Magic.Foo = new Proxy(Object.assign({}, Magic.Foo), {
apply: function(target, thisArg, argumentsList) {
// never gets in here
console.log('Proxying function call');
console.log(target);
return 2;
}
});
console.log(Foo.runme()); // outputs 1
console.log(Magic.Foo.runme()); // outputs 1
上尝试了两个代理,并通过Magic.foo
查看它是否需要成为自己的对象。两者都没有。
答案 0 :(得分:1)
您在此假设apply
陷阱的工作方式与get
陷阱类似 - 即,对于代理对象的任何属性 - 但它们不会。当代理本身被称为函数时,apply
陷阱运行。在这里,您的代理是Magic.Foo
,但您从不致电Magic.Foo()
。您只能调用Magic.Foo.runme()
,这不是代理功能。
您必须将要拦截其调用的每个函数都包装在其自己的Proxy
包装器中。
或者,您可以在get
上使用Magic.Foo
陷阱,该陷阱返回具有每个被访问属性的相应行为的函数。
答案 1 :(得分:1)
apply
陷阱仅适用于函数的代理,这些函数创建可调用对象(即函数)。在普通对象(如new Proxy
)上创建的{}
会创建一个不可调用的代理对象,该对象永远不会触发apply
。