2014-09-03 94 views
0

我正在使用节点js和套接字IO创建一个游戏。获取:RangeError:超出最大调用堆栈大小

我创造的球员如下

var player = new playa.playa(); 
     player.name = info.name; 
     player.picture = info.picture; 
     player.email = info.email; 
     player.user_id = info.user_id; 
     player.socket = socket; 

然后我的播放器添加到我的阵列

 playerPool[info.user_id] = player; 

映射,然后我就可以参考playerPool [USER_ID],而不必通过循环

迭代

我想将我的播放器加入我的游戏

 g.addPlayer(playerPool[info.user_id]); 


     this.addPlayer = function(player) 
     { 
      var self = this; 
      if(this.max_players > this.current_players.length) 
      { 
       self.current_players[player_userid] =player; 
      } 
     } 

不过,我不断收到一个错误

for(var key in obj) RangeError max call stack size exceeded 

我的问题是

  1. 为什么JavaScript的通过我的钥匙循环?

如果我叫

 player.user_id 

返回播放器类的用户ID,所以我知道这是一个有效的对象。

我从来没有要求JavaScript遍历该对象,只需将它映射到游戏类中的玩家阵列就像我对我的玩家池一样。然而,这似乎是一个问题。有没有人招致同样的问题?

+0

如何被playPool阵列宣布? – Huangism 2014-09-03 18:24:58

+0

首先,我看到current_player是一个对象,它将不会有长度,除非你分配current_player = []但如果你初始化这种方式current_player [user_id]其中用户id = 50将自动创建50个值,这将使长度为50 – Sunand 2014-09-03 18:27:22

+0

@Huangism var playerPool = [];那不是问题。我能够传递玩家对象,甚至可以在游戏类中提取它的属性。问题是“玩家”对象不能被分配给self.current_players这是一个类广泛var this.current_players = [] – Dnaso 2014-09-03 19:43:47

回答

1

的for循环的语法并精确地仅,它循环通过该对象

所以,语法

for(var key in obj) 

的密钥值将给出该对象即属性的密钥。为了访问对象值,你需要在这个for循环中使用obj [key]。

另一种方式让您创建将成为数组的值:

playerPool.forEach(function(player) { 
    //Over here you get each player in the array 
}); 
+0

有趣。好吧但我的问题是为什么我不能设置我的对象到另一个数组? – Dnaso 2014-09-03 19:40:47

+0

self.current_players [player_userid] = player;这总是返回一个空数组 – Dnaso 2014-09-03 19:43:23

相关问题