Javascript,console.log打印print对象,但属性未定义

时间:2015-06-16 22:30:27

标签: javascript console undefined execution

我有一个读取关卡数据的函数。这是有问题的片段;演员是一个数组,我在它上面循环,直到找到一个类型为玩家的演员。

function Level(plan) {
   //Cut snippet..........
    this.player = this.actors.filter(function(actor) {
        return actor.type == "player";
    });

    console.log(this.player);
//................  
}

玩家对象,

function Player(pos) {
    this.pos = pos
    this.size = new Vector(0.8, 1.5);
    this.speed = new Vector(0, 0);
}
Player.prototype = new Actor();
Player.prototype.type = "player"

问题是在控制台中,

console.log(this.player)

将显示所有正确的详细信息,但是当我尝试记录位置时,例如

console.log(this.player.pos)

我未定义。它是一个简单的程序,我不使用ajax或任何东西。认为它可能与执行顺序有关,有人可以向我解释这个和解决方案吗?如果是执行顺序,则会非常感谢解释。

非常感谢, 雨天

2 个答案:

答案 0 :(得分:2)

您得到undefined,因为当您过滤actor数组时,您会得到一个新数组。所以console.log(this.player)输出一个数组,而不是一个对象。

您需要获取数组this.player的第一个元素才能输出其pos属性。

这样的事情:

if(this.player.length > 0) 
    console.log(this.player[0].pos);

答案 1 :(得分:0)

对单个玩家使用reduce代替filter

  this.player = this.actors.reduce(function(current, actor) {
      return actor.type === 'player' ? actor : current;
  });