为什么我的函数代理没有在Node中调用?

时间:2018-04-17 18:06:07

标签: node.js ecmascript-6 es6-proxy

我正在使用代理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查看它是否需要成为自己的对象。两者都没有。

2 个答案:

答案 0 :(得分:1)

您在此假设apply陷阱的工作方式与get陷阱类似 - 即,对于代理对象的任何属性 - 但它们不会。当代理本身被称为函数时,apply陷阱运行。在这里,您的代理是Magic.Foo,但您从不致电Magic.Foo()。您只能调用Magic.Foo.runme(),这不是代理功能。

您必须将要拦截其调用的每个函数都包装在其自己的Proxy包装器中。

或者,您可以在get上使用Magic.Foo陷阱,该陷阱返回具有每个被访问属性的相应行为的函数。

答案 1 :(得分:1)

apply陷阱仅适用于函数的代理,这些函数创建可调用对象(即函数)。在普通对象(如new Proxy)上创建的{}会创建一个不可调用的代理对象,该对象永远不会触发apply