Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 将socket.io实例传递给JS对象构造函数_Javascript_Node.js_Sockets_Module_Socket.io - Fatal编程技术网

Javascript 将socket.io实例传递给JS对象构造函数

Javascript 将socket.io实例传递给JS对象构造函数,javascript,node.js,sockets,module,socket.io,Javascript,Node.js,Sockets,Module,Socket.io,我阅读并尝试执行该解决方案,但是我尝试将我的io实例传递给对象构造函数,而不是类。我最初试图做一些像 //index.js const {CONNECTION, CREATE_ROOM} = require('./SignalTypes') const app = require('express')() const server = require('http').Server(app) const io = require('socket.io')(server) const Lobbie

我阅读并尝试执行该解决方案,但是我尝试将我的
io
实例传递给对象构造函数,而不是类。我最初试图做一些像

//index.js
const {CONNECTION, CREATE_ROOM} = require('./SignalTypes')

const app = require('express')()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const Lobbies = require('./lobby')

let lobbies = new Lobbies(io)

io.of('/menu').on(CONNECTION, (socket) => {
    console.log(`User connected to main menu`)

    socket.on(CREATE_ROOM, () => {
        const roomKey = lobbies.createLobby()
        socket.emit(ROOM_CREATED, roomKey)
    })
    ...
})
我的大厅文件看起来像

//lobby.js
const shortid = require('shortid')

function Lobbies(io) {
    this.io = io;
    this.lobbies = {}
}

Lobbies.prototype.createLobby = () => {
    let roomKey = shortid.generate()

    //create namespace for new lobby
    const lobbyNamespace = this.io.of(`/${roomKey}`)  // issue
    
    this.lobbies[roomKey] = new Lobby(roomKey, lobbyNamespace)
    return roomKey
}
//Lobby object constructor defined later
...
module.exports = Lobbies
但是,我不断遇到错误,它说,
io
在行中未定义

//lobby.js
const lobbyNamespace = this.io.of(`/${roomKey}`)
//TypeError: Cannot read property 'of' of undefined

我想知道是否有一种方法可以将我的
io
对象传递给我的对象构造函数,而不必将其更改为ES6类或其他什么。有什么建议吗?

当使用箭头函数语法时,您将丢失此
参考。我不知道您为什么要使用旧的、难以理解的语法,但如果您想使用这种语法而不是类,您应该:

Lobbies.prototype.createLobby = function() {
    let roomKey = shortid.generate()

    //create namespace for new lobby
    const lobbyNamespace = this.io.of(`/${roomKey}`)  // issue
    
    this.lobbies[roomKey] = new Lobby(roomKey, lobbyNamespace)
    return roomKey
}