使用Socket.io与Node.js开发后端时,代码中this.emit的指代含义是什么?
createNewGame方法中this指向解释
结论
这段代码里createNewGame函数中的this,指代的是当前和客户端建立连接的Socket.io单个socket实例,也就是initializeGame方法接收的第二个参数socket对象。
指向逻辑
Socket.io的socket.on()方法在绑定事件回调时,会自动将回调函数的执行上下文绑定到触发当前事件的socket实例上。你这里用普通函数声明createNewGame,而普通函数的this由调用时的上下文决定,所以触发createNewGame事件时,回调内部的this就会指向当前触发事件的socket对象。
对应代码的作用
你写的两行this调用作用分别是:
this.emit('createNewGame', {gameId: gameId, mySocketId: this.id}):向当前socket对应的前端客户端推送createNewGame事件,把生成的游戏ID和当前socket的唯一ID返回给前端this.join(gameId):让当前socket加入gameId对应的Socket.io房间,后续你就可以基于这个房间ID实现同游戏房间内的多客户端消息广播
补充注意点
如果你把createNewGame改成箭头函数声明,这个this指向就会失效,因为箭头函数不绑定自己的this,会继承外层作用域的this,此时就拿不到socket实例了。这也是为什么这段代码要用普通函数声明createNewGame而不是箭头函数的原因。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

