我希望下面的函数更灵活,并且如果在参数中定义了它们,则接受对其他函数的多次回调。
$(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 }
这可能吗?此外,如果参数未定义,我该如何处理?
例如,如果对该函数的一次调用定义了多个回调,而另一个只有一个回调,则有一种方法可以处理缺少回调的问题。
干杯,
:)
答案 0 :(得分:31)
您可以使用关键字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。 Here's an edited version of the plugin to demonstrate this
答案 1 :(得分:8)
使用参数变量。
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]);
等
答案 2 :(得分:7)
只需遍历arguments
对象:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/Arguments
答案 3 :(得分:3)
是的,这是可能的,这是一个例子:
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");
答案 4 :(得分:1)
感谢传播操作员,你可以做这样的事情
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]);
答案 5 :(得分:0)
在最近的时间里,您现在可以使用或传播和休息操作员在此处详细说明 - Pass unknown number of arguments into javascript function