当使用代理对象时,如何捕获目标方法的参数?

11 浏览
0 Comments

当使用代理对象时,如何捕获目标方法的参数?

我试图使用Javascript的Proxy对象来拦截传递给我代理的目标的'method'的参数。

请考虑以下示例:

var test = {

doSomething: function() {

console.log( arguments.length );

}

};

var testProxy = new Proxy( test, {

get: function( target, property, receiver ) {

// 当访问的属性是一个被调用的函数时,我想要访问任何参数

return target[ property ];

}

} );

testProxy.doSomething( 'this', 'is', 'lame' ); // 我想要捕获这些参数

看起来这些Proxy对象只允许您拦截访问属性,而不是实际的函数调用及其参数,当属性实际上是一个函数时。

经过一番思考后,我意识到get方法只是用于属性访问,而不是调用,但是我本来希望能够在Proxy中定义类似call方法的东西。

也许通过在Proxy中定义apply方法可以实现,但那样我可能必须为我想要代理的对象的每个单独的方法创建一个Proxy对象;这不是我想要的。

除非我在这里忽略了实际的替代可能性:为什么Proxy实现中会忽视这一点呢?代理的整个目的不是能够拦截方法调用及其参数吗?

或者这是我对Javascript的又一个误解,Javascript不是一种'经典'面向对象的语言,而且在Javascript的上下文中,我寻找的功能实际上是没有意义的吗?

0