2010-02-23 5 views
1

J'ai 2 fonctions jQuery. On appelle l'autre (en théorie ...). Ce sont:fonction jQuery appelant

$.testFunction = function(arg1){ 
    alert("testFunction(arg1)"); 
    $.testFunction(arg1, ""); 
} 

$.testFunction = function(arg1, arg2){ 
    alert("testFunction(arg1, arg2)"); 
    alert("arg1: " + arg1 + "\narg2: " + arg2); 
} 

J'ai deux fonctions, parce que quand je ne l'ai pas obtenu le deuxième paramètre à passer, je voudrais appeler la version simple d'entre eux. Mais quand je l'appelle comme ceci:

$.testFunction("first param"); 
alert("Before second call"); 
$.testFunction("first param", "second param"); 

qu'il appelle toujours le second, et (dans la fenêtre d'alerte) met: "testFunction (arg1, arg2)" puis « arg1: le premier paramètre arg2: non définie ". Pourquoi travaille comme ça? Pourquoi la première fonction n'est-elle pas appelée quand je ne passe qu'un seul paramètre?

Répondre

1
$.testFunction = function(arg1, arg2){ 
    if(arg2 === null || arg2 === undefined){ 
     // run the first version 
    }else{ 
     // run the second version 
    } 
} 

Essayez que la place - de cette façon, vous ne disposez que d'une fonction et vous suffit de vérifier la présence du deuxième avant d'exécuter le param corps.

+0

Merci à tous! Je pensais, que cela fonctionne comme en Java, où je peux écrire des méthodes surchargées! - – user196776

1

Il n'y a pas de surcharge de fonction en javascript, votre deuxième fonction remplace la première.

Vous pouvez obtenir quelque chose de similaire inspecter l'objet arguments comme ceci:

$.testFunction = function(arg1, arg2){ 
    if(arguments.length == 1){ 
    // handle one argument 
    }else if(arguments.length == 2{ 
    // handle 2 arguments 
    } 
} 
+0

+1 à tout le monde !! (Puisque vous avez tous répondu en même temps) –

1

Uhh - vous écrasez immédiatement la première fonction. Voici l'équivalent de ce que vous faites:

x = "foo"; 
x = "bar"; 
alert(x); // 'bar' -- "why isn't this foo????!?!" 

Une bonne option serait d'écrire une seule fonction qui se comporte différemment en fonction du nombre d'arguments qui lui sont passés:

var testFunction = function(a, b) { 
    if (b === undefined) { 
     // no second parameter 
    } 
}; 
2

Javascript n » La surcharge de la méthode de soutien (au moins dans le sens traditionnel) est la raison.

La deuxième fonction est d'écraser le premier.

1

Vous écrasez la fonction. Javascript n'a pas de concept de fonctions surchargées. A la place, les fonctions prennent un nombre arbitraire de paramètres, et vous pouvez y accéder via la propriété spéciale "arguments".

$.testFunction = function(arg1, arg2){ 
    if(arguments.length == 2){ 
     alert("arg1: " + arg1 + "\narg2: " + arg2); 
    }else{ 
     alert("arg1: " + arg1); 
    } 
} 
1

Vous redéfinissez la fonction et remplacez efficacement la première fonction à argument unique par une fonction à deux arguments. Maintenant, vous n'avez vraiment qu'une seule fonction. Vous pouvez vouloir look at this article qui pourrait aider avec la surcharge.

Questions connexes