我正在尝试使用Javascript Proxy
对象来捕获传递给我代理的目标的 'method' 的参数。
请考虑以下示例:
var test = {
doSomething: function() {
console.log( arguments.length );
}
};
var testProxy = new Proxy( test, {
get: function( target, property, receiver ) {
// I'd like to have access to any arguments when
// the property being accessed here is a function
// that is being called
return target[ property ];
}
} );
testProxy.doSomething( 'this', 'is', 'lame' ); // I want to trap those arguments
看起来这些Proxy
对象只允许您捕获访问属性,而不是实际的函数调用及其参数,当属性实际上是一个函数时。
经过一番思考,我“明白了”(请原谅双关语),get
方法只是用于属性访问,而不是调用,但是我本来希望能够定义类似于call
方法的东西在Proxy
中。
也许可以通过在Proxy
中定义一个apply
方法来实现,但那样我可能需要为要代理的对象的每个单独的方法创建一个Proxy
对象;而这不是我想要的。
除非我忽略了实际的替代可能性:这在Proxy
实现中是如何被忽视的?!代理的整个重点不就是能够拦截方法调用及其参数吗?
还是这又是我对Javascript的另一个误解,认为Javascript不是一个“经典”的面向对象编程语言,而我正在寻找的功能在Javascript的上下文中实际上没有意义?