Функции Javascript и необязательные аргументы - PullRequest
35 голосов
/ 25 февраля 2009

У меня есть две почти идентичные функции javascript, которые используются для запуска вызова jquery $ .get. Аргументы функции передаются вызываемому скрипту.

Проблема в том, что для одного набора вызовов требуется дополнительный аргумент, а для другого - нет.

Для этого я использую две почти идентичные функции JavaScript, которые я упомянул. Вот они:

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

Как видите, 2-я функция просто принимает дополнительный аргумент с именем 'type', который затем передается через вызов $ .get.

Я хочу объединить эти две функции, но я не уверен, как можно необязательно включить этот третий аргумент в этот (массив / объект / что бы он ни был в {} (да, javascript noob)), который передается в $ .get.

РЕДАКТИРОВАТЬ, просто чтобы сказать .... черт, вы, ребята, хороши. : D

Ответы [ 3 ]

35 голосов
/ 25 февраля 2009

все параметры в javascript являются необязательными, вы можете использовать массив параметров внутри функции для доступа к параметрам, переданным обычно следующим образом:

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

myFunction("Hello", "World");

Производит: Happy Day, Option1 = Hello, Option2 = World

Надеюсь, это иллюстрирует, как вы можете использовать массив arguments для улучшения кода.

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

Затем вы можете вызвать его с последним параметром, являющимся типом как необязательный, если параметр передан, он используется, если не опущен.

Также, поскольку фактический параметр необязателен, во-первых, вы также можете добавить имя в конец определения функции и использовать его, если, но вместо arguments[4] вы бы сделали 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);
            });
    }

Этот вызов будет включать тип

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

, где этот вызов не будет

 process_type("xxx", "xxx", "xxx", "xxx");
29 голосов
/ 25 февраля 2009

Поскольку все, что вы делаете со всем, кроме url и domid, передает его в $.get, почему бы не сделать это?

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:'..'});
16 голосов
/ 05 ноября 2012

Несколько простых способов сделать это

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

Для неограниченного количества аргументов вы можете использовать массив 'arguments', например:

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

ExampleArguments('arg1',2,someVar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...