Разрешить функцию 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 }
Возможно ли это? Также, если аргументы не определены, как я могу это обработать?
Например, если один вызов функции имеет несколько обратных вызовов, а другой - только один, есть способ обработки отсутствия наличия обратных вызовов.
Приветствия,
:)
Ответы
Ответ 1
Вы можете использовать ключевое слово 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, Здесь отредактированная версия плагина, чтобы продемонстрировать это.
Ответ 2
Просто перетащите объект arguments
: https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/Arguments
Ответ 3
Используйте переменную 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]);
и др.
Ответ 4
Да, это возможно, вот пример:
function myfunct()
{
var arguments = myfunct.arguments;
for (var i = 0; i < arguments.length; i++)
{
alert("Argument " + i + " value = " + arguments[i]);
}
}
Вы можете называть это fonction любым количеством аргументов:
myfunct("foo");
myfunct("foo","bar");
Ответ 5
В более последнее время вы можете теперь использовать или распространять и отдыхать операторы, как описано здесь - Передавать неизвестное количество аргументов в функцию javascript