Разрешение функции javascript принимать любое количество аргументов

Я бы хотел, чтобы приведенная ниже функция была более гибкой и принимала множественные обратные вызовы для других функций, если они определены в аргументах.

$(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 }

Возможно ли это? Также, если аргументы не определены, как мне это обработать?

Например, если для одного вызова функции определено несколько обратных вызовов, а для другого - только один, существует ли способ обработки отсутствия обратных вызовов.

Приветствия ,

:)

21
задан Jakub Jankowski 24 September 2016 в 09:54
поделиться

4 ответа

Вы можете использовать ключевое слово 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. Вот отредактированная версия плагина, чтобы продемонстрировать это.

31
ответ дан 29 November 2019 в 06:51
поделиться
7
ответ дан 29 November 2019 в 06:51
поделиться

Да, это возможно, вот пример:

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");
3
ответ дан 29 November 2019 в 06:51
поделиться

Используйте переменную arguments.

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

и т.д.

8
ответ дан 29 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: