2012-09-19 52 views
1

在node.js中,TCP服務器有以下幾種方法來聽:如何在JavaScript中編寫一個參數大小的泛型函數?

server.listen(port, [host], [backlog], [listeningListener]) 
server.listen(path, [listeningListener]) 
server.listen(handle, [listeningListener]) 

我想創建調用該下級TCP服務器專用服務器。我想爲我的用戶提供一個listen方法,它只是調用tcp服務器的正確listen方法。

有沒有辦法讓我避免寫三種不同的偵聽方法,並將它們的參數傳遞給三個tcp服務器的偵聽方法?它會傳遞可選參數嗎?

可我只是做這樣的事情(稍有由語法):

myapp.listen(args*){ 
    tcpserver.listen(args*); 
} 

回答

2

在JavaScript中,all of a function's arguments are always available under the name arguments,不管他們是否也有自己的名稱;所以你可以寫:

myapp.listen(){ 
    tcpserver.listen.apply(tcpserver, arguments); 
} 

使用the function Function.apply轉發arguments所需的方法調用。


編輯補充:我也應該澄清的是,儘管這樣的:

在node.js中,TCP服務器有以下幾種方法來聽[…]三個TCP服務器的監聽方法[…]

與方式the Node.js documentation describes things一致的,它不是嚴格準確。 JavaScript沒有任何函數/方法重載的概念;相反,它必須是一個Server對象有一個單一的listen方法,該方法檢查其第一個參數以確定要執行哪個「過載」。

相關問題