2014-09-03 90 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

相關問題