javascript - 对象克隆和 eval() 的 Javascript 问题
问题描述
我正在用 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] = {...};
然后,您始终可以通过该密钥访问它。
推荐阅读
- html - 是否可以将图像放置在不影响滚动条的窗口边缘?
- mysql - 如何编写一个对行进行分组的 sql 查询,然后对其中一列进行一些计算?
- java - 从 txt 文件或变量中读取数据更快?
- c# - c#如何最好地将数组或列表放入也有名称的类中?
- visual-studio-2019 - Visual Studio 2019 如何打开默认选项卡
- c++ - C++ 入门 - 变量的值
- c# - 可疑的演员阵容中没有继承自的解决方案中的类型->为什么/以某种方式起作用
- r - 如何在 ggplot2 geom_col (R) 中绘制百分比而不是计数?
- javascript - 尽管使用 htmlspecialchars 对单引号进行编码,JavaScript 仍然抱怨这些引号需要在函数调用中转义
- html - 如何设置元素水平固定?