2012-12-28 2 views
0

Je charge un fichier javascript de façon asynchrone et le fichier contient cette ligne définie dans un plugin par défaut. Il renvoie une valeur de retour correcte sur certaines pages alors que dans d'autres pages, le même fichier renvoie des valeurs non définies. Des pointeurs?La fonction renvoie undefined dans certaines pages

login: '<p>Log in with your '+ fnc(code).name +' account</p>' 

quelque part au fond du même fichier que je l'ai défini la fonction:

function fnc(s){ 
     if(s =='' || s == 'a'){ 
     this.name = 'name1'; 
     this.value = 'value1'; 
     }else if(s == 'b'){ 
     this.name = 'name2'; 
     this.value = 'value2'; 
     }else{ 
     this.name = 'name1'; 
     this.value = 'value1'; 
     } 
     return this; 
    } 

Pour une raison quelconque, la fonction retourne de undefined '

MISE À JOUR: "code" est global variable qui est présente dans un autre fichier, en fonction de la valeur de cette variable, je veux retourner des valeurs différentes de la fonction

UPDATE2: Je veux retourner plusieurs v alues ​​de la fonction, mis à jour le code pour refléter cela.

+1

Comment cette fonction est-elle exécutée? 'this' sera' window' sauf si vous avez défini son contexte. –

+1

Qu'est-ce que 'code'? Votre fonction ne définit que 'name' dans trois cas spécifiques, donc elle peut (rester) à' undefined' sinon. – pimvdb

Répondre

2

this peut se référer à la fenêtre du document, à moins que votre écriture d'un objet, ne pas utiliser this

function fnc(s){ 
    var rc = '';  
    if(s =='' || s == 'a'){ 
     rc = 'name1'; 
    } else if (s == 'b'){ 
     rc = 'name2'; 
    } 
    return rc; 
} 
+0

à droite mais maintenant vous ne serez pas indéfini, maintenant vous obtiendrez une valeur vide à la place ou quoi que ce soit 'var rc'. Encore une mauvaise pratique d'avoir 'this' flottant dans une fonction au bas de la page quelque part. – keeg

+0

'ceci' était le problème, il a été réparé maintenant. – neelmeg

2

La valeur de this dans cette fonction va être soit une référence à window soit undefined, selon que le "mode strict" est en vigueur.

Cela n'a vraiment pas beaucoup de sens que la fonction soit écrite comme ça. On dirait qu'il devrait juste être:

function fnc(s) { 
    return s == '' || s == 'a' ? "name1" : s == "b" ? "name2" : null; 
} 

alors vous suffit d'appeler comme fnc(code) sans avoir besoin d'une propriété « name ». Comme quelqu'un d'autre l'a fait remarquer, vous ne faites pas de provision lorsque le "code" est autre chose que la chaîne vide, un "a" ou un "b".

2

Êtes-vous le passage d'une valeur Fnc autre que « », « a » ou « b », car elle retournera non définie

+0

a ajouté 'else' pour 'attraper tout' – neelmeg