2015-06-16 172 views
0

而且我有一个读取关卡数据的函数。这是有问题的片段;演员是一个数组,我正在循环播放,直到找到类型播放器的演员。Javascript,console.log打印打印对象,但属性未定义

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

你得到undefined,因为当您过滤actor数组,你会得到一个新的数组作为结果。因此console.log(this.player)输出数组,而不是单个对象。

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

事情是这样的:

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

使用reduce,而不是filter单个球员。

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