javascript类变量范围混淆(socket.io事件)

javascript类变量范围混淆(socket.io事件),javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在使用带有express和socket.io的node创建一个游戏服务器。我已将游戏服务器放在一个额外模块中。 我的问题是无法访问io事件中的游戏服务器对象。 我应该如何解决这个问题,或者我应该以不同的方式组织我的项目 // gameServer.js 'use strict' var io = require('socket.io'); var socketioJwt = require('socketio-jwt'); var config = require('../config.js

我正在使用带有express和socket.io的node创建一个游戏服务器。我已将游戏服务器放在一个额外模块中。
我的问题是无法访问io事件中的游戏服务器对象。 我应该如何解决这个问题,或者我应该以不同的方式组织我的项目

// gameServer.js
'use strict'
var io = require('socket.io');
var socketioJwt = require('socketio-jwt');
var config = require('../config.js');

class GameServer {
    constructor(http) {
        this.io = new io(http);
        this.connectedUsers = [];

        this.initSocket();
    }

    initSocket() {
        console.log('users', this.connectedUsers);
        this.io.on('connection', this.onConnection);
    }

    onConnection(socket) {
        console.log('users', this.connectedUsers); // undefined
    }
}
我按如下方式初始化服务器:

'use strict'
var express = require('express');
var app = express();
var http = require('http').Server(app);

// init game server
var gameServerApp = new GameServer(http);

http.listen(3000, function() {
    console.log('listening on *:3000');
});

我假设这是一个常见的问题,但我不知道如何解决它。

您可以
绑定到
此。onConnection

initSocket() {
        console.log('users', this.connectedUsers);
        this.io.on('connection', this.onConnection.bind(this));
    }

您可以打印错误吗?onConnection()中的this.connectedUsers未定义,但我希望它是GameServer实例的connectedUsers。检查什么
this
returns我实际上从未使用过JavaScript类,但请尝试将“this”分配给initSocket中的变量,然后改用该变量。e、 g.,var self=此;this.io.on('connection',self.onConnection);谢谢,这个有用。有没有办法以某种方式实现自动化?如果不是的话,我必须在类中的每个回调上绑定它(相当多)。据我所知,我会使用
bind