gpt4 book ai didi

对象克隆和 eval() 的 JavaScript 问题

转载 作者:行者123 更新时间:2023-12-01 00:18:55 25 4
gpt4 key购买 nike

我正在使用socketio和nodejs服务器编写一个小游戏,这对我来说是相当新的。当有人创建游戏时,它会将信息发送到服务器,服务器会创建一个包含所有游戏信息的对象。我使用 eval() 来创建以游戏名称命名的对象,例如“bob_game = {...}”。这是我的代码:

games.push("Partie de " + data.pseudo);
gamesStatus.push("lobby");
eval("var " + data.pseudo + "_game = {name :'" + data.pseudo + "',status : 2,playerNb : 1,maxPlayerNb :" + data.nbPlayers + ",players : ['" + data.pseudo + "'], xCoords : [], yCoords : [], directions : []}");
io.emit(data.pseudo, {command : "joinGame", game : data.pseudo});
io.emit("updateGameList", {command : "updateGameList", game : games, gameStatus : gamesStatus});

这一切都正常工作,我可以将所有信息发回给其他用户,说明游戏已创建!在网站上,每个可加入游戏都有一个按钮。当您按下其中之一时,它会向服务器发送一个带有游戏 ID 和玩家姓名的 joinGameRequest。所有信息均已正确收集,我可以设置一个临时对象来替换 bob_game 对象:

game = eval(gameName + "_game");

这可以避免我在想要进行更改时调用原始对象 bob_game,否则我会将 eval() 放在任何地方,因为 bob 并不总是被称为 bob...但是,我知道在对“游戏”进行所有更改之后,我必须将所有属性转移回 bob_game “以某种方式保存所有内容”。这就是我遇到问题的地方...我说游戏未定义...尽管我一直在上面几行进行更改并且我能够记录游戏的playerNb...所以游戏已定义...

console.log(game.playerNb);
eval(gameName + "_game = game");

我需要帮助xD

最佳答案

不要这样做:

eval("var " + data.pseudo + "_game = {

如果您需要名为“bob_game”的东西,请将其放入对象内

var games = {};
var newGameKey = data.pseudo + "_game";
games[newGameKey] = {...};

然后您可以随时通过该 key 访问它。

关于对象克隆和 eval() 的 JavaScript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com