2017-12-15 12 views
0

なり、私のコードです:オブジェクトは、ここで未定義

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で未定義です(未定義のプロパティ 'position'を読み取ることはできません)。私が次のようにそれを渡しているなら、どうすればいいでしょう:gMessages.handler[obj.type](obj);明らかに、ここではobjが定義されています。

+5

ハンドラを設定するときは、ハンドラを関数ではなく戻り値に設定します。 'this.HandleBonus'を参照するのではなく、' this.HandleBonus() 'を呼び出しています。あなたがそれを呼び出すと、あなたはobjを提供しません。たぶん、 '()'を取り除くだけで、まず試してみるのだろうか? –

+0

ああ、それは私が眠る時間のように見える...あなたがしたい場合は、答えを投稿して、私はそれをマークします。ありがとう! – asap

答えて

1

ハンドラを設定するときは、ハンドラを関数ではなくその戻り値に設定します。あなたはthis.HandleBonusを参照する代わりにthis.HandleBonus()を呼び出しています。あなたがそれを呼び出すと、あなたはobjを提供しません。多分、()を取り除くことが最初に試すのだろうか?

関連する問題