2009-10-23 7 views
6

Je connais assez bien jQuery. J'essaie d'écrire des méthodes communes pour mon propre but. Voici un exemple ci-dessous:Puis-je utiliser jQuery.extend pour simuler une surcharge de méthode?

$.extend({ 
    add : function(a, b) 
      { 
      return a + b; 
      }, 

    add : function(a, b, c) 
      { 
      return a + b + c; 
      } 
    }); 

Le scénario ci-dessus est-il possible? Puis-je utiliser le même nom d'extension et passer différents paramètres, comme la surcharge de méthode?

+1

Je pense que cela écrasera la première propriété 'add' avec la 2ème – alex

+0

Je suppose que vous vouliez dire "surcharger". Mais comme alex le remarque, la deuxième fonction * va * écraser ** la première ... – Shog9

Répondre

15

Vous essayez de faire un certain type de ce qu'on appelle dans certaines langues la surcharge de la méthode.

JavaScript ne le supporte pas de cette manière. JavaScript est très polyvalent et vous permet d'obtenir ce type de fonctionnalité de différentes manières.

Pour votre exemple particulier, votre fonction add, je vous recommande d'effectuer une fonction qui accepte un nombre arbitraire de paramètres, en utilisant l'objet arguments.

jQuery.extend(jQuery, { 
    add: function (/*arg1, arg2, ..., argN*/) { 
    var result = 0; 

    $.each(arguments, function() { 
     result += this; 
    }); 

    return result; 
    } 
}); 

Ensuite, vous pouvez passer un certain nombre d'arguments:

alert(jQuery.add(1,2,3,4)); // shows 10 

Pour la méthode plus complexe, vous surcharge peut détecter le nombre d'arguments passés et ses types, par exemple:

function test() { 
    if (arguments.length == 2) { // if two arguments passed 
    if (typeof arguments[0] == 'string' && typeof arguments[1] == 'number') { 
     // the first argument is a string and the second a number 
    } 
    } 
    //... 
} 

Consultez l'article suivant, il contient une technique très intéressante qui tire parti de certaines fonctionnalités du langage JavaScript comme les fermetures, l'application de la fonction, etc, pour imiter Overload:

+1

Il est tard et je suis probablement en train de lire votre code mais je ne le ferais pas. "JQuery.add (1,2,3,4) 'retour' 10'? – Jared

+0

Sa fonction utilise un analyseur de motif magique, et a déterminé que le prochain nombre dans la séquence est de 5;) – alex

+0

@Jared: Vous avez complètement raison, juste était une faute de frappe! – CMS

3

Je pense que cela écrasera la première propriété 'add' avec la 2ème propriété 'add' que vous avez définie. C'est utile lors du développement de plugins, et vous voulez fournir une liste de valeurs par défaut raisonnables pour un objet de configuration.

0

JavaScript ne jette pas des erreurs si vous passez moins d'arguments à une fonction qu'il est défini à accepter.

Vous pouvez utiliser une configuration d'arguments variables dans votre fonction en utilisant "arguments", ou vous pouvez simplement définir votre fonction comme dans la 2ème instruction (avec 3 paramètres) et simplement vérifier si le 3ème paramètre est indéfini. Si un argument n'est pas fourni, il est défini comme indéfini et vous pouvez simplement le vérifier (ce n'est pas la même chose que null), ce qui peut être plus simple que d'utiliser l'objet arguments.

Questions connexes