3

对于 socket.on("someChannel", handler),我希望将我的处理函数提取到另一个文件中。因此,它们需要在套接字 obj 和更多附加信息中传递。

喜欢:

socket.on("myEvt", myEvtHandler);

myEvtHandler(socket, additionalInfo, data) {//some stuff here}

但我不能。我能想到的最好的方法是关闭:

(function(socket, addtionalInfo) {
    socket.on("myEvt", function(data) {
        myEvtHandler(socket, addtionalInfo, data);
    });
})(socket, addtionalInfo);

这个对吗?有没有更好的方法?

4

1 回答 1

8

您可以使用以下方法创建部分函数bind

socket.on("myEvt", myEvtHandler.bind(null, socket, additionalInfo));

bind()返回一个前两个参数已经“填充”的函数。传递给bind()(null在这种情况下)的第一个参数将是this处理程序中的对象 (更多信息)。

传递给处理程序的任何其他参数socket.io将从第三个参数开始可用:

function myEvtHandler(socket, additionalInfo, data) { ... }

同样,这(几乎)会做同样的事情:

socket.on("myEvt", function(data) {
  myEvtHandler(socket, additionalInfo, data);
});
于 2013-10-13T07:58:49.607 回答