![](/img/trans.png)
[英]Javascript - passing callback function as argument that would accept any number of accounts
[英]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.