簡體   English   中英

允許javascript函數接受任意數量的參數

[英]Allowing javascript function to accept any number of arguments

我希望下面的函數更靈活,並接受多個回調到其他函數,如果它們在參數中定義。

$(function() {
    function icisDashBox(colorElem, thisWidth, thisHeight, completeCallBack) {
        $(colorElem).colorbox({
        transition: 'none',
        innerWidth: thisWidth,
        innerHeight: thisHeight,
        opacity: '0.5',
        onOpen: function() { 

        },
        onLoad: function() { 

        },
        onComplete:function() { 
            $('#cboxLoadedContent').wrap('<div id="icis_dialog_msg" />'); 

            completeCallBack();

        },
        onCleanup: function() { 

        },      
        onClosed: function() {
            $('#cboxLoadedContent').unwrap(); 
        }
    });
}

icisDashBox('.example9', '500', '500', completeFunction);

function completeFunction() {

    var fooClass = $("#colorbox").addClass("FOO");

    var barClass = $("#colorbox").addClass("BAR");

    var ajaxCnt = $.ajax({
        type: "GET",
        url: "http://www.payso.me.uk",
        dataType: "html",
        success: function(data) {
            $("#colorbox").addClass("AJAX SUCCESS");
        }
    });

    return {
        x : fooClass,
        y : barClass,
        z : ajaxCnt                         
    };
}

所以在一個理想的世界中,我的函數看起來像這樣,沒有明確聲明任何參數:

function icisDashBox() { function code here }

這可能嗎? 此外,如果參數未定義,我該如何處理?

例如,如果對函數的一次調用定義了幾個回調,而另一個只有一個回調,則有一種方法可以處理缺少回調的問題。

干杯,

:)

您可以使用關鍵字arguments ,它是傳遞的參數的數組,如下所示:

function myFunc() {
   if(arguments.length > 0)     //be sure to check if there are any...
     var arg1 = arguments[0];
}

但是 ,更好的方法是接受一個對象,例如:

function myFunc(settings) {
   settings = settings || {};   //in case it was called as just: myfunc()
   var something = settings.something || "default value";
}

你這樣稱呼它:

myFunc({ something: "value", somethingElse: "otherValue" });

這種方法允許你接受任意數量的參數,但也有任何可選的,沒有一堆myFunc(null, null, null, "value")類型調用只提供你想要的參數,而且它們被命名這使得容易維護IMO。 這是該插件的編輯版本,用於演示此內容

使用參數變量。

function TestMe()
{
   var args = arguments;

   for (var a in args)
   {
     alert(args[a]);
   }
}

現在您可以將任意數量的參數傳遞給TestMe函數:

TestMe(1);
TestMe(1,2,3);
TestMe(1,2,3,4,5,6);
TestMe.apply(this, [1,2,3,4,5]); 

等等

感謝傳播操作員現在你可以做這樣的事情

 function myFunction(...params) { console.log(...params); } myFunction('Many arguments', 1, {two: 3}, ["four", 5]); // to access one by one function oneByOne(...params) { params.map(param => { console.log(param); }); } oneByOne('Many arguments', 1, {two: 3}, ["four", 5]); 

是的,這是可能的,這是一個例子:

function myfunct()
{

  var arguments = myfunct.arguments;

  for (var i = 0; i < arguments.length; i++)
        {

                alert("Argument " + i + " value = " + arguments[i]);

            }

}

您可以通過任意數量的參數調用此函數:

myfunct("foo");

myfunct("foo","bar");

在最近的時間你現在可以使用或傳播和休息運算符在這里詳細說明 - 將未知數量的參數傳遞給javascript函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM