Javascript-funksjoner og valgfrie argumenter

stemmer
33

Jeg har to nesten identiske Javascript-funksjoner som brukes til å initiere en jquery $ .Få samtale. Argumentene til funksjonen sendes til skriptet blir kalt.

Problemet er at ett sett av samtaler krever et ekstra argument for at den andre ikke.

For å oppnå dette jeg bruker de to nesten identiske Javascript-funksjoner jeg har nevnt. Her er de:

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);
    });
}

Som du kan se, godtar andre funksjonen bare et ekstra argument kalt 'type' som deretter gått gjennom $ .Få samtalen.

Jeg ønsker å kombinere disse to funksjonene, men jeg er ikke sikker på hvordan jeg kan eventuelt inkludere det tredje argument i at (matrise / objekt / hva det er i {} (ja, javascript noob)) som blir vedtatt i $ .Få.

EDIT bare si .... faen, dere er gode. : D

Publisert på 25/02/2009 klokken 19:41
kilden bruker
På andre språk...                            


3 svar

stemmer
35

alle parametere i javascript er valgfrie, kan du bruke parametrene rekke innsiden av en funksjon for å få tilgang parametere som sendes ordinally slik:

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

myFunction("Hello", "World");

Produserer: Happy Day, Alternativ 1 = Hei, Alternativ 2 = Verden

Forhåpentligvis kan dette illustrerer hvordan du kan bruke argumentene array å forbedre noen kode.

    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);
            });
    }

Deretter kan du kalle det med den siste parameter er den typen som er valgfritt, hvis parameteren er passert den brukes hvis det ikke er utelatt.

Også siden den aktuelle parameteren er valgfri i første omgang kan du også legge inn navnet til slutten av funksjonsdefinisjonen og bruke det samme hvis men i stedet for arguments[4]at du ville gjøreif(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);
            });
    }

Dette Call vil inkludere typen

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

hvor denne samtalen ville ikke

 process_type("xxx", "xxx", "xxx", "xxx");
Svarte 25/02/2009 kl. 19:43
kilden bruker

stemmer
29

Siden alt du gjør med alt, men url og DomiD passerer det til $.get, hvorfor ikke gjøre dette?

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:'..'});
Svarte 25/02/2009 kl. 19:50
kilden bruker

stemmer
15

Noen enkle måter å gjøre det

// '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
}

For ubegrenset argumenter kan du bruke tabell argumenter ", eksempel:

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

ExampleArguments('arg1',2,someVar);
Svarte 05/11/2012 kl. 18:42
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more