Javascript通过中间件传递一些参数,不受影响

时间:2014-04-14 15:42:17

标签: javascript function arguments

我有一个看起来像这样的中间件:

function(middleWareData) { // has more args, middleware doesn't know how many
    if(middleWareData.passes()) {
        origFunction(/* call with the rest of the args? */
    }
}

我真的不确定从arguments弹出第一个参数然后将其余参数传递给原始函数的最佳方法。原始函数是非常动态的(它是一个连接器,要么是使用4个参数的RabbitMQ,要么是使用2的Redis,或者只需要1的单元测试驱动程序),所以中间件不知道实际要接收多少个参数

使用这个:var args = Array.prototype.slice.call(args, 1)似乎是获得真正论据的良好开端。但是,我相信我只是将参数2通过多个参数转换为一个参数,这将作为数组传递给第一个变量。不是我想要的。怎么做对了?

1 个答案:

答案 0 :(得分:0)

你几乎已经掌握了如何获得正确的参数(不包括第一个参数)。要将arguments数组发送到下一个函数,您只需将.apply()新数组发送到原始函数。

apply()是函数原型Function.prototype.apply的一种方法,因此可以在任何函数上调用它。它接受两个参数:该调用的上下文(或this,以及将用于该函数调用的参数的Array。根据您的代码,我假设函数在全局上下文中运行,因此第一个参数设置为null

function(middleWareData) {
    if (middleWareData.passes()) {
        origFunction.apply(null, Array.prototype.slice.call(arguments, 1));
    }
}