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

javascript class variable scope confusion (socket.io events)

本文关键字:socket io 事件 类变量 范围 JavaScript      更新时间:2023-09-26

我正在使用带有快速和 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');
});

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

你可以bind this this.onConnection

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