2015-05-18 61 views
0

說我有一個功能:添加參數的函數調用該函數之前 - Node.js的

function foo(){ 
console.log(arguments); 
} 

process.nextTick(foo); 

如何申請論點在process.nextTick()調用foo的?

我怎麼做這樣的事情

//僞代碼

var args = []; 
process.nextTick(foo.addArgs(args)); 

...但沒有調用foo?

+1

w/Array:'Function.apply.bind(foo,null,['arg1','arg2','arg3'])' – dandavis

回答

3

有幾種可能性。對於前幾個選項,我(可能錯誤地)假設你不介意將args作爲單個數組參數傳遞。如果您希望args的每個元素都是foo()的單獨參數,請參見最後一個示例(使用apply())。

假如你不使用thisfoo()內,這裏有一些選擇:

process.nextTick(function() { 
    foo(args); 
}); 

或者:

var bar = foo.bind(null, args); 
process.nextTick(bar); 

如果使用thisfoo()內,在上面的例子中改變null到你期望this有的價值。例如:

var bar = foo.bind(foo, args); 
process.nextTick(bar); 

您也不妨看看call()apply()。如果你想擁有你想要在整個函數參數攤開陣列(比如,[1, 2, 7]apply()是特別有用的(即中,foo(1, 2, 7)代替foo([1, 2, 7])):

process.nextTick(function() { 
    foo.apply(null, args); 
} 

bind(),如果你在foo內部使用this,然後在上面的示例中將null更改爲您期望this具有的值。

+0

這似乎相當合法 –

2

你可以做到這一點的匿名函數:

var args = []; 
process.nextTick(function(){ 
    foo.apply(foo, args); 
}); 
+0

這是最直接的解決方案,但我想知道其他方法它也是 –

相關問題