我有一个看起来像这样的中间件:
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通过多个参数转换为一个参数,这将作为数组传递给第一个变量。不是我想要的。怎么做对了?
答案 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));
}
}