2010-11-05 15 views
4

J'ai pris la fonction suivante de this site et l'ai branchée dans mon code pour afficher une chaîne de temps conviviale basée sur un argument millisecondes.Pourquoi cette fonction JavaScript renvoie-t-elle: "0: 0fonction toString() {[code natif]}"?

Pourquoi cette fonction ne fonctionne-t-elle pas?

function getTimeFromMillis(millis) 
    { 

     milliSecs = millis; 

     msSecs = (1000) 
     msMins = (msSecs * 60) 
     msHours = (msMins * 60) 
     numHours = Math.floor(milliSecs/msHours) 
     numMins = Math.floor((milliSecs - (numHours * msHours))/msMins) 
     numSecs = Math.floor((milliSecs - (numHours * msHours) - (numMins * msMins))/ msSecs) 


     if (numSecs < 10){ 
      numSecs = "0" + numSecs.toString 
     } 
     if (numMins < 10){ 
      numMins = "0" + numMins.toString 
     } 

     resultString = numHours + ":" + numMins + ":" + numSecs  
     return resultString; 

    } 

Si je passe une valeur de milliseconde de ma fonction d'appel que je reçois ceci:

0:0function toString() { [native code] }:0function toString() { [native code] } 

Répondre

6

Vous avez oublié le () dans vos appels à « toString ».

éditer — désolé a dû s'éloigner pendant une seconde. Comme l'a commenté @Gareth, les références à "toString" sont syntaxiquement valables, car ce ne sont que des références à des fonctions. Ainsi, le analyseur n'a pas de problèmes avec votre code. Ce qui ne va pas, c'est quand vous convertissez implicitement ces références en chaînes.

Si vous ajoutez simplement () à chaque appel, cela devrait fonctionner beaucoup mieux. Ou, comme cette même page que vous avez liée pour signaler quelques postes plus bas, vous n'avez vraiment pas besoin de .toString() du tout.

+0

Plus précisément, le code '" 0 "+ numMins.toString' ajoute une * chaîne * à une * fonction *. Javascript le fait en convertissant la fonction en une chaîne, ce qu'elle fait en sortant la source de la fonction (ou, le cryptique '[code natif]' pour les fonctions intégrées) – Gareth