2017-12-15 3 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에 정의되지 않았습니다 (속성 '위치'를 읽을 수 없음). 내가 이것을 다음과 같이 전달한다면 어떻게 될 수 있겠습니까? gMessages.handler[obj.type](obj); 분명히 여기 obj가 정의됩니다.

+5

처리기를 설정할 때 함수가 아니라 반환 값으로 설정합니다. 'this.HandleBonus' 대신에 this.HandleBonus()를 호출하고 있습니다. 당신이 그것을 부를 때, 당신은 obj를 제공하지 않습니다. 어쩌면'()'을 벗으려고 시도하는 것이 가장 먼저 할 수 있을까요? –

+0

오오, 잠잘 때가 된 것 같습니다. 원한다면 답변을 게시하십시오. 표시해 드리겠습니다. 감사! – asap

답변

1

처리기를 설정할 때 함수가 아니라 반환 값으로 설정합니다. 이걸 부르지. 핸 드 보너스. 이걸 참조하는 대신에. 핸들 보너스. 당신이 그것을 부를 때, 당신은 obj를 제공하지 않습니다. 어쩌면()을 벗으려고 시도하는 것이 처음일까요?

관련 문제