web-dev-qa-db-fra.com

Fonctions Javascript et arguments optionnels

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

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. Les voici:

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 un argument supplémentaire appelé 'type' qui est ensuite transmis via l'appel $ .get.

Je veux combiner ces deux fonctions, mais je ne sais pas comment je peux éventuellement inclure ce 3e argument dans (tableau/objet/quoi que ce soit dans {} (oui, javascript noob)) qui est passé dans $ .get.

EDIT juste pour dire .... merde, vous êtes bons. :RÉ

35
Ian

Puisque tout ce que vous faites avec tout sauf url et domid est de le passer au $.get, pourquoi ne pas faire ça?

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:'..'});
29
Paolo Bergantino

tous les paramètres en javascript sont facultatifs, vous pouvez utiliser le tableau de paramètres à l'intérieur d'une fonction pour accéder aux paramètres passés normalement 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 du 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 comme facultatif, si le paramètre est passé, il est utilisé sinon il est omis.

De plus, étant donné que le paramètre réel est facultatif en premier lieu, vous pouvez également ajouter le nom à la fin de la définition de la fonction et l'utiliser de la même façon, mais au lieu de arguments[4], 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);
            });
    }

Cet appel comprendrait le type

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

où cet appel ne serait pas

 process_type("xxx", "xxx", "xxx", "xxx");
35
Quintin Robinson

Quelques façons simples de 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 des arguments illimités, vous pouvez utiliser le tableau "arguments", exemple:

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

ExampleArguments('arg1',2,someVar);
16
Giovanne Afonso