web-dev-qa-db-ja.com

JavaScript関数とオプションの引数

Jquery $ .get呼び出しを開始するために使用される2つのほぼ同一のJavaScript関数があります。関数の引数は、呼び出されるスクリプトに渡されます。

問題は、呼び出しの1つのセットには、他の呼び出しには必要ない追加の引数が必要なことです。

これを達成するために、私が言及したほぼ同じ2つの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呼び出しを介して渡されます。

これらの2つの関数を組み合わせたいのですが、$。getで渡される3番目の引数(配列/オブジェクト/ {}(はい、javascript noob)にあるもの)をオプションで含める方法がわかりません。

ただ言うために編集....くそー、君たちは良いです。 :D

35
Ian

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

javascriptのすべてのパラメーターはオプションです。関数内でparameters配列を使用して、通常のように渡されるパラメーターにアクセスできます。

_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

うまくいけば、これは引数配列を使用してコードを改善する方法を示しています。

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

次に、最後のパラメーターをオプションとしてタイプで呼び出すことができます。パラメーターが渡される場合は、省略されない場合は使用されます。

また、実際のパラメーターは最初はオプションであるため、関数定義の最後に名前を追加し、if(type) myOptions["type"] = type;を行う場合は_arguments[4]_の代わりに同じ名前を使用することもできます。

_    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");
_
35

簡単な方法

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

引数を無制限にするには、配列「引数」を使用できます。例:

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

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