假设我有一个带有任意数量参数的函数(最后一个是回调):
xxx.create ('arg1', 'arg2', ..., 'arg10', callback) {
...
}
但它很难看。我希望能够提取前几个参数,并执行以下操作:
var args = ['arg1', 'arg2', ..., 'arg10']
xxx.create (args.explode(), callback) {
...
}
当然我可以为xxx.create()
编写一个包装器,但我希望它是干净的。
感谢。
答案 0 :(得分:7)
您正在寻找Function.apply
。
var args = ['arg1', 'arg2', ..., 'argN'];
xxx.create.apply(xxx, args.concat(callback)) {
// ...
}
我使用Array.concat
以便不改变原始的args
数组。如果那不是问题,那么其中任何一个都足够了:
var args = ['arg1', 'arg2', ..., 'argN', callback];
xxx.create.apply(xxx, args) {
// ...
}
// or
var args = ['arg1', 'arg2', ..., 'argN'];
args.push(callback);
xxx.create.apply(xxx, args) {
// ...
}
现在,如果您想使用包装器而不是公开Function.apply
调用:
function create_wrapper() {
xxx.create(xxx, arguments);
}
// then
create_wrapper('arg1', 'arg2', ..., 'argN', callback);
将完成这项工作。
答案 1 :(得分:0)
本地arguments变量可以在这里提供帮助:
foo = function(){
// convert local 'arguments' object to array ...
argsArray = Array.prototype.slice.call(arguments);
// pop the callback off
callback = argsArray.pop();
// the callback alerts the remaining, variable-length arguments list
callback(argsArray);
};
这是jsfiddle:http://jsfiddle.net/K38YR/