我使用代理get
方法很好。然后我尝试在函数上使用它,并很快意识到我需要使用 apply
方法。这个简单的例子不起作用。它永远不会进入 apply。
Node 看起来支持 apply https://node.green/#ES2015-built-ins-Proxy--apply--handler 。不确定我做错了什么。
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
上尝试了代理,并通过 Object.assign
尝试了它是否需要成为自己的对象。都不起作用。
最佳答案
您在这里假设 apply
陷阱的工作方式与 get
陷阱类似 - 即,对于代理对象的任何属性 - 但事实并非如此。当代理本身被称为函数时,apply
陷阱就会运行。在这里,您的代理是 Magic.Foo
,但您从不调用 Magic.Foo()
。您只需调用 Magic.Foo.runme()
,它不是代理函数。
您必须将要拦截其调用的每个函数包装在其自己的Proxy
包装器中。
或者,您可以在 Magic.Foo
上使用 get
陷阱,该陷阱返回一个函数,该函数对每个访问的属性具有适当的行为。
关于node.js - 为什么我的函数代理没有在 Node 中被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49884736/