2012-03-24 60 views
3

说我有一个函数,它的参数任意数字(最后就是回调):爆炸数组元素为逗号分隔的参数(Node.js的)

xxx.create ('arg1', 'arg2', ..., 'arg10', callback) { 
    ... 
} 

但它是丑陋的。我希望能够提取前几个参数做类似:

var args = ['arg1', 'arg2', ..., 'arg10'] 
xxx.create (args.explode(), callback) { 
    ... 
} 

当然,我可以写一个包装为xxx.create(),但我希望它是干净的。

谢谢。

回答

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); 

将做的工作。

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/