1

在 node.js 中,一个 tcp 服务器有以下方法来监听:

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

我想创建一个特定于应用程序的服务器,它调用这个较低级别的 tcp 服务器。我想为我的用户提供一个监听方法,它只调用 tcp 服务器的正确监听方法。

有没有办法让我避免编写三种不同的监听方法,并将它们的参数传递给三个 tcp 服务器的监听方法?它会传递可选参数吗?

我可以做这样的事情吗(稍微编造的语法):

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

1 回答 1

2

在 JavaScript 中,函数的所有参数总是在 name 下可用arguments,无论它们是否也有自己的名称;所以你可以写:

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

使用该函数Function.apply转发arguments到所需的方法调用。


编辑添加:我还应该澄清一下,尽管这样:

在 node.js 中,一个 tcp 服务器有以下方法来监听 […] 三个 tcp 服务器的监听方法 […]

与Node.js 文档描述事物的方式一致,但并不完全准确。JavaScript 没有任何函数/方法重载的概念;相反,一个Server对象必须有一个listen方法来检查其第一个参数以确定要执行的“重载”。

于 2012-09-19T22:47:46.177 回答