Javascript 对象克隆和 eval() 问题
Javascript problem with object cloning and eval()
我正在用 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...
但是,我知道在对 "game" 进行了所有更改之后,我必须将所有属性转移回 bob_game "to save everything in a way"。那就是我遇到问题的地方...我说游戏未定义...即使我已经在上面几行中进行了更改并且我能够记录游戏的 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] = {...};
然后您可以随时通过该密钥访问它。
我正在用 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... 但是,我知道在对 "game" 进行了所有更改之后,我必须将所有属性转移回 bob_game "to save everything in a way"。那就是我遇到问题的地方...我说游戏未定义...即使我已经在上面几行中进行了更改并且我能够记录游戏的 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] = {...};
然后您可以随时通过该密钥访问它。