2009-02-25 11 views
32

J'ai deux fonctions javascript presque identiques qui sont utilisées pour lancer un appel jquery $ .get. Les arguments de la fonction sont transmis au script appelé.Javascript Fonctions et arguments optionnels

Le problème est qu'un ensemble d'appels nécessite un argument supplémentaire que l'autre ne fait pas.

Pour ce faire, j'utilise les deux fonctions javascript presque identiques que j'ai mentionnées. Ici, ils sont:

function process(url, domid, domain, scan_id) 
{ 
    $.get(url, 
    { 
     domain: domain, 
     scan_id: scan_id 
    }, 

    function(data) 
    { 
     $(domid).html(data); 
    }); 
} 

function process_type(url, domid, type, domain, scan_id) 
{ 
    $.get(url, 
    { 
     domain: domain, 
     type: type, 
     scan_id: scan_id 
    }, 

    function(data) 
    { 
     $(domid).html(data); 
    }); 
} 

Comme vous pouvez le voir, la 2ème fonction accepte simplement qui est ensuite passé un argument supplémentaire appelé « type » par l'appel .get $. Je veux combiner ces deux fonctions, mais je ne sais pas comment je peux éventuellement inclure ce 3ème argument dans ce tableau (array/object/quel qu'il soit dans {} (yes, javascript noob)) qui est passé $ .get.

EDIT juste pour dire .... bon sang, vous êtes bons. : D

+0

Référez à ce fil [http: // stackoverflow .com/questions/456177/surcharge-de-fonction-dans-javascript-meilleures pratiques] (http://stackoverflow.com/questions/456177/function-overloading-in-javascript-best-practices) –

Répondre

29

Puisque tout ce que vous faites avec tout, mais url et domid passe à la $.get, pourquoi ne pas le faire?

function process_type(url, domid, args) { 
    $.get(url, args, function(data) { 
     $(domid).html(data); 
    }); 
} 

// call it without type 
process_type('myurl', 'domid', {domain:'..', scanid:'...'}); 
// call it with type 
process_type('myurl', 'domid', {type: '..', domain:'..', scanid:'..'}); 
35

tous les paramètres en javascript sont en option, vous pouvez utiliser le tableau de paramètres à l'intérieur d'une fonction aux paramètres d'accès passé ordinale comme ceci:

function myFunction(option1) 
{ 
    var option2 = arguments[1]; 
    if(arguments[0] == option1) 
     alert("Happy Day, Option1 = " + option1 + ", Option2 = " + option2); 
} 

myFunction("Hello", "World"); 

Produit: Happy Day, Option1 = Bonjour, Option2 = Monde

J'espère que cela illustre comment vous pouvez utiliser le tableau d'arguments pour améliorer le code.

function process_type(url, domid, domain, scan_id) 
    { 
      var myOptions = { 
       domain: domain, 
       scan_id: scan_id 
      }; 

      if(arguments[4]) 
       myOptions["type"] = arguments[4]; 

      $.get(url, myOptions, 

      function(data) 
      { 
        $(domid).html(data); 
      }); 
    } 

Ensuite, vous pouvez l'appeler avec le dernier paramètre étant le type en option, si le paramètre est adopté, il est utilisé sinon il est omis.

En outre, depuis le paramètre réel est en option en premier lieu, vous pouvez également ajouter le nom à la fin de la définition de la fonction et utiliser le même si mais au lieu de arguments[4] que vous feriez if(type) myOptions["type"] = type;

function process_type(url, domid, domain, scan_id, type) 
    { 
      var myOptions = { 
       domain: domain, 
       scan_id: scan_id 
      }; 

      if(type) 
       myOptions["type"] = type; 

      $.get(url, myOptions, 

      function(data) 
      { 
        $(domid).html(data); 
      }); 
    } 

Cette appel comprendrait le type

process_type("xxx", "xxx", "xxx", "xxx", "xxx"); 

où cet appel ne serait pas

process_type("xxx", "xxx", "xxx", "xxx"); 
+0

:/sorry, je Je ne sais pas comment je peux utiliser cela pour résoudre mon pro blem ... – Ian

+0

Je posterai votre code avec un exemple. –

+0

Il faudrait mettre votre paramètre en option sur la fin de la liste des paramètres si tous ont des numéros fixes, vous pouvez y accéder par des arguments [x] au lieu par leur nom. – schnaader

14

Quelques moyens simples pour le faire

// 'b' is optional 
// the 'null' value would be the default value 

function Example1(a,b){ 
    b = b || null; 

    // Some code here 
} 

function Example2(a,b){ 
    if(typeof b == 'undefined') b = null; 

    // Some code here 
} 

function Example3(a,b){ 
    if(b === undefined) b=null; 

    // Some code here 
} 

function Example4(a,b){ 
    if(!b) b=null; 

    // Some code here 
} 

Pour les arguments illimités vous pouvez utiliser des 'arguments' du tableau, par exemple:

function ExampleArguments(){ 
    for(var i=0; i<arguments.length; i++){ 
      // Alert the current argument 
      alert(arguments[i]); 
    } 
} 

ExampleArguments('arg1',2,someVar); 
Questions connexes