获取:RangeError:超出最大调用堆栈大小

时间:2014-09-03 18:18:39

标签: javascript node.js loops

我正在使用节点js和套接字IO创建游戏。

我正在创建玩家

  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循环通过我的键?
  2. 如果我打电话

           player.user_id
    

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

    我从未要求JavaScript迭代对象,只需将其重新映射到游戏类中的player数组,就像我对我的播放器池一样。然而,这似乎是一个问题。有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分:1)

for循环的语法正是这样做的,它循环遍历该对象的键值

所以语法

for(var key in obj) 

会给出该对象的键,即属性。为了访问对象值,您需要在此for循环中使用obj [key]。

获取您创建的数组值的另一种方法是:

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