2012-03-24 89 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/