2014-06-20 3 views
0

K gars je travaille sur un projet d'école (en javascript) et je construis un donjon. Ce n'est probablement pas le meilleur code que vous ayez jamais vu mais eh, je suis à l'école pour ça.Un autre: typeerror uncaught undefined n'est pas une fonction

Im obtenir l'erreur de:

function damageFormula() 
{ 
    var damage = myDamage(myWeapon); // I get the error on this function 
    var doDamage = Math.floor(0.085 * damage * myAttackLvl + (myLevelLvl/5) - (1+15*Math.random())); 

    return doDamage; 
}; 

La fonction myDamage:

function myDamage(myWeapon) 
{ 
    switch(myWeapon) 
    { 
     case "Spike Sword": 
      myDamage += 10; 
      break; 
     case "Magic Long Sword": 
      myDamage += 20; 
      break; 
     default: 
      myDamage += 3; 
      break; 
    } 
    return myDamage; 
}; 

La variable d'arme est:

var myWeapon = "Spike Sword"; 

Et la variable myDamage est:

var myDamage = 10; 

Est-ce que quelqu'un sait pourquoi j'ai cette erreur et/ou comment la résoudre?

Si vous avez besoin de plus d'informations, demandez-moi anyting et je vais essayer d'y répondre aussi bien que possible.

+0

quelle est la ligne que ça vient :)? – Ven

+0

var damage = myDamage (myWeapon); – user3761720

Répondre

0

Parce que myWeapon est Spike Sword, vous faites ceci:

case "Spike Sword": 
     myDamage += 10; 
     break; 

Cependant, myDamage() est une fonction, pas un numéro, donc cela n'a pas de sens à la console JavaScript! Au lieu de cela, il transforme myDamage en une chaîne, puis place "10" à la fin d'une chaîne.

Maintenant, myDamage est une chaîne. Toutefois, dans damageFormula(), vous appelez myDamage en tant que fonction. Ainsi, un TypeError peut être jeté, bien que pour moi,

Je suggère de faire var damage = 0; et faire damage += 10;, damage += 20;, etc ..

+0

Merci beaucoup! C'est ce que je cherchais! – user3761720

+0

Glad cela aidé! –

0

Méfiez-vous de vos noms - vous utilisez les deux myDamage comme un nom pour une fonction et en tant que nom pour une variable! Cela va créer un état incohérent dans votre code.

Vous utilisez probablement var myDamage ailleurs, ce qui le rend nul dans la portée.

+0

Merci pour l'aide! Je me demandais pendant des heures pourquoi mon code ne fonctionnait pas: / – user3761720

Questions connexes