Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js和Socket.io-Dynamic Socket.on()_Javascript_Node.js_Events_Socket.io - Fatal编程技术网

Javascript Node.js和Socket.io-Dynamic Socket.on()

Javascript Node.js和Socket.io-Dynamic Socket.on(),javascript,node.js,events,socket.io,Javascript,Node.js,Events,Socket.io,我做了一些东西来缩小我的socket.on()代码 在此上下文中,我已经使用 ... var io = require('socket.io').listen(...); io.sockets.on('connection', function(socket) { // my code for this client ... }); 在我吃这个之前 socket.on('event1', function(args1) {callback1(args1);}); socket.

我做了一些东西来缩小我的socket.on()代码

在此上下文中,我已经使用

...
var io = require('socket.io').listen(...);
io.sockets.on('connection', function(socket) {
    // my code for this client
    ...
});
在我吃这个之前

socket.on('event1', function(args1) {callback1(args1);});
socket.on('event2', function(args2) {callback2(args2);});
...
socket.on('eventN', function(argsN) {callbackN(argsN);});
现在我有


    var events = {
        event1: 'callback1',
        event2: 'callback2',
        ...
        eventN: 'callbackN'
    };
    for(var event in events) {
        var callback = events[event];
        socket.on(event, function() {
            this[callback].apply(this, arguments);
        });
    }
callbackN函数似乎始终是call。 当event1使用args1触发时,callbackN使用args1调用;当event2使用args2触发时,callbackN使用args2调用

怎么了?

这应该可以:

var events = {
    event1: 'callback1',
    event2: 'callback2',
    ...
    eventN: 'callbackN'
};

var setCB = function(ev) {
    var callback = events[ev];
    socket.on(event, function() {
        this[callback].apply(this, arguments);
    });
};

for (var event in events) {
  setCB(event);
}
你所看到的怪异或非直觉行为可以很好地解释这一点


希望有帮助。

指的是什么?
指的是类范围,所有这些代码都在同一个类/命名空间中运行。