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

对象克隆和eval()的Javascript问题,javascript,node.js,object,socket.io,eval,Javascript,Node.js,Object,Socket.io,Eval,我正在用socketio和nodejs服务器编写一个小游戏,这对我来说是很新的。当有人创建游戏时,它会将信息发送给服务器,服务器会创建一个包含所有游戏信息的对象。我使用eval()使对象以游戏名命名,如“bob_game={…}”。 这是我的密码: games.push("Partie de " + data.pseudo); gamesStatus.push("lobby"); eval("var " + data.pseudo + "_game = {name :'" + data.pseu

我正在用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 = eval(gameName + "_game");
这避免了我在想要进行更改时调用原始对象bob_game,否则我会将eval()放在所有位置,因为bob并不总是被称为bob。。。 但是,我知道,在对“游戏”做了所有更改之后,我必须将所有属性转移回bob_游戏“以某种方式保存一切”。这就是我的问题所在。。。我说游戏没有定义。。。尽管我已经在上面几行做了修改,并且我能够记录游戏的玩家B。。。所以游戏的定义是

console.log(game.playerNb);
eval(gameName + "_game = game");
我需要帮助,请不要这样做:

eval("var " + data.pseudo + "_game = {
如果你需要一个叫做“bob_游戏”的东西,把它放在一个物体里面

var games = {};
var newGameKey = data.pseudo + "_game";
games[newGameKey] = {...};
然后您就可以通过该键随时访问它。

不要这样做:

eval("var " + data.pseudo + "_game = {
如果你需要一个叫做“bob_游戏”的东西,把它放在一个物体里面

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

然后您可以始终通过该键访问它。

您还应该熟悉在代码中设置断点,以便能够准确地检查正在发生的事情。Chrome Developer Tools是您的朋友,或者在代码中添加
调试器
内联。您还应该熟悉在代码中设置断点,这样您就可以准确地检查正在发生的事情。Chrome Developer Tools是您的朋友,或者在代码中添加
调试器
内联。此外,不要使用eval创建对象。如果它们以字符串的形式出现,请使用
JSON.parse(string)
,否则,请在常规javascript中创建它们
myObject={name:data.pseudo,…}
,那么游戏是数组还是对象?或者两者都有?会是这样吗?games[bob_game]={playerNb=1}games[mike_game]={playerNb=3}它是一个对象,而不是数组。我希望这个jsfiddle可以帮助您:如何获得所有游戏的所有名称属性?像一个数组=game[all].name
var-listOfGames=Object.keys(游戏)--这实际上是您希望它出现在这样一个对象中的重要原因之一。通过编程和可视化的方式查看可用的内容非常容易。另外,不要使用eval创建对象。如果它们以字符串的形式出现,请使用
JSON.parse(string)
,否则,请在常规javascript中创建它们
myObject={name:data.pseudo,…}
,那么游戏是数组还是对象?或者两者都有?会是这样吗?games[bob_game]={playerNb=1}games[mike_game]={playerNb=3}它是一个对象,而不是数组。我希望这个jsfiddle可以帮助您:如何获得所有游戏的所有名称属性?像一个数组=game[all].name
var-listOfGames=Object.keys(游戏)--这实际上是您希望它出现在这样一个对象中的重要原因之一。通过编程和可视化方式查看可用内容非常容易。