node.js - 为什么我的函数代理没有在 Node 中被调用?

标签 node.js ecmascript-6 es6-proxy

我使用代理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/

相关文章:

node.js - GraphQL 查询在 node-georedis API 回调完成之前返回数据(异步问题?)

node.js - 分配前使用变量 'newData' - TypeScript

node.js - 我无法在本地运行 Azure Functions 核心工具

javascript - 使用 map() 的意外逗号

javascript - 创建 Proxy 的结构化克隆

javascript - 如何使用 Promise 链接和共享先前的结果

javascript - 了解 Javascript 的 Module Require 语法

javascript - 不熟悉我遇到的这种 javascript 语法

javascript - 使用javascript代理拦截方法调用时进行非法调用

javascript - 代理递归函数