对于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);
这是对的吗?还有更好的方法吗?
答案 0 :(得分:7)
您可以使用bind
创建部分功能:
socket.on("myEvt", myEvtHandler.bind(null, socket, additionalInfo));
bind()
将返回一个函数,前两个参数已经“填入”。传递给bind()
的第一个参数(在本例中为null
)将成为处理程序中的this
对象(more info)。
socket.io
传递给处理程序的任何其他参数将从第三个参数开始提供:
function myEvtHandler(socket, additionalInfo, data) { ... }
同样,这会(差不多)相同:
socket.on("myEvt", function(data) {
myEvtHandler(socket, additionalInfo, data);
});