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

时间:2016-02-01 15:42:52

标签: javascript node.js socket.io

我使用带有express和socket.io的节点来创建游戏服务器。我把游戏服务器放在一个额外的模块中 我遇到的问题是我无法在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');
});

我认为这是一个常见的问题,但我无法弄清楚如何解决它。

1 个答案:

答案 0 :(得分:0)

您可以bind thisthis.onConnection

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