我正在使用代理get
方法很好。然后我尝试在一个函数上使用它并很快意识到我需要使用apply
方法。这个简单的例子不起作用。它永远不会进入应用程序。
Node看起来支持applyhttps://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
包装纸。
或者,您可以使用get
陷阱上Magic.Foo
返回一个函数,该函数对每个访问的属性具有适当的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)