2015-11-23 3 views
0

Итак, я создаю текстовую RPG и имею объект, содержащий функции для атак игрока. Я хочу разрешить игроку вводить индекс функции для ее вызова. Я попытался использовать цикл for для этого, но насколько я знаю, вы не можете вызвать функцию, используя переменную. Есть идеи? Вот код, я застрял на - я выложу полный код ниже:Получение индексов от объекта

function playHit(skill) 
{ 
    moveIndex = prompt("Your turn! Enter the number of the move you want to use.") 
    moveChosen = abilitiesObject[moveIndex] 
    for (move in moveList) 
    { 
     if (move === moveChosen) 
     { 
      moveList.move 
     } 
    } 
} 

Полный код:

abilities = ["0. Slash", " 1. Push"] 
abilitiesObject = ["Slash", "Push"] 
function getMoves() 
{ 
    document.getElementById("moves").innerHTML = abilities 
} 
var moveList = new Object() 
moveList.Slash = function(damage) 
{ 
    if (damage < 5) 
    { 
     Poutcome = 0 
    } 
    else if (damage >= 5) 
    { 
     Poutcome = 1 
    } 
    Psmackdown = (Poutcome + att) - eDef 
    alert("You swing wildly! The monster takes " + Psmackdown + " points of damage.") 
    eHp = eHp - Psmackdown 
} 

moveList.Push = function(damage) 
{ 
    if (damage < 5) 
    { 
     Poutcome = -1 
    } 
    else if (damage > 9) 
    { 
     Poutcome = 2 
     alert("You shove the monster into a spike pit!") 
    } 
    else 
    { 
     Poutcome = 0 
    } 
    Psmackdown = (Poutcome + att) - eDef 
    alert("You shove the monster with all your might! The monster takes " + Psmackdown + " points of damage") 
} 


function playHit(skill) 
{ 
    moveIndex = prompt("Your turn! Enter the number of the move you want to use.") 
    moveChosen = abilitiesObject[moveIndex] 
    for (move in moveList) 
    { 
     if (move === moveChosen) 
     { 
      moveList.move 
     } 
    } 
} 
+0

ли вы решить вашу проблему? Мое решение помогло вам? –

ответ

2

Вам нужно это:

var keys = Object.keys(abilitiesObject); 

Ref .: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/keys

Возможно, вам также понадобится полисполнение Object.keys для совместимости со старыми браузерами: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/keys#Polyfill

Посмотрите на это:

var player = { 
 
    
 
    moves: { 
 
    push: function() { 
 
     document.write('Push!!'); 
 
    }, 
 
    
 
    smash: function() { 
 
     document.write('Smash!!'); 
 
    } 
 
    } 
 
}; 
 

 
var abilities = Object.keys(player.moves); 
 

 

 
var move = prompt("Your turn! Enter the number of the move you want to use.\r\n Options: " + abilities); 
 

 
// Execute 
 
if (player.moves[move]) { 
 
    player.moves[move](); 
 
}

+0

'Object.keys()' не гарантирует заказ – Ramanlfc

Смежные вопросы