传递给函数的对象变为未定义

时间:2017-12-15 23:35:24

标签: javascript

这是我的代码:

handler: {},

init: function () {
    this.handler['Bonus'] = this.handleBonus();
},

handleReplica: function (msg) {
    var gameObjects = JSON.parse(msg.data);
    var survivors = new Set();
    for (var i = 0; i < gameObjects.length; i++) {
        var obj = gameObjects[i];
        console.log(obj);

        if (gMessages.handler[obj.type] === undefined)
            continue;

        survivors.add(obj.id);
        gMessages.handler[obj.type](obj);
    }
    gGameEngine.gc(survivors);
},

handleBonus: function(obj) {
    var bonus = gGameEngine.bonuses.find(function (el) {
        return el.id === obj.id;
    });
    var position = Utils.getEntityPosition(obj.position);

    if (bonus) {
        bonus.bmp.x = position.x;
        bonus.bmp.y = position.y;
    } else {
        bonus = new Bonus(obj.id, position, obj.bonusType);
        gGameEngine.bonuses.push(bonus);
    }
}

我只留下了我遇到问题的部分。这里是:objhandleBonus中未定义(无法读取属性&#39;未定义的位置)。如果我像这样传递它怎么可能:gMessages.handler[obj.type](obj);显然,这里定义了obj。

1 个答案:

答案 0 :(得分:1)

设置处理程序时,不将其设置为函数,而是设置其返回值。你正在调用this.HandleBonus()而不是引用this.HandleBonus。当你打电话时,你不提供obj。也许只是取消()将是第一件尝试?