这是我的代码:
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);
}
}
我只留下了我遇到问题的部分。这里是:obj
在handleBonus
中未定义(无法读取属性&#39;未定义的位置)。如果我像这样传递它怎么可能:gMessages.handler[obj.type](obj);
显然,这里定义了obj。
答案 0 :(得分:1)
设置处理程序时,不将其设置为函数,而是设置其返回值。你正在调用this.HandleBonus()而不是引用this.HandleBonus。当你打电话时,你不提供obj。也许只是取消()将是第一件尝试?