【发布时间】:2020-08-27 13:43:47
【问题描述】:
我有这个类游戏。
class Game {
constructor(player) {
this.player1 = player;
}
getHost() {
// player has property nickname
return `Host: ${this.player1.nickname}`;
}
}
我相信我遇到的问题是 getHost() 正在脱离它的上下文,但是我不确定如何解决它。我正在学习 JS,我对这种语言对 this 的使用感到非常困惑。我也是第一次使用 socket.io,所以这给我增加了很多困惑。
我的服务器脚本(服务器工作,只显示相关部分):
io.on('connection', (socket) => {
// passed defined player
socket.on('host game', (player) => {
const game = new Game(player);
console.log(game.getHost()); // still works here
io.sockets.emit("game created", game);
});
});
客户:
socket.on("game created", (game) => {
const gameElement = document.createElement("li");
gameElement.innerHTML = game.getHost(); // ERROR
games.appendChild(gameElement);
});
在上面的标记线上,我得到了Uncaught TypeError: game.getHost is not a function。
很抱歉,如果 socket.io 函数让它变得更加混乱,基本上只是当游戏从服务器传递到客户端时,它不再起作用了。
感谢您的帮助
【问题讨论】:
-
如果你在“游戏创建”回调中记录游戏,你得到的输出是什么?
-
你在客户端创建游戏实例吗?
-
您不能将函数从服务器发送到客户端。类实例是 JSON 编码的,它删除了函数。
标签: javascript socket.io this function-binding