在JQuery中是否可以跳过可选参数并传递下一个参数?

时间:2012-08-25 21:56:53

标签: javascript jquery

在JQuery中是否可以跳过可选参数并传递下一个参数?如果是,jquery函数如何确定哪个值是哪个参数?

一个例子:

//
// function signature is
// jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
//
// function is called as
//
$.get('ajax/test.html', function (data) {
    $('.result').html(data);
    alert('Load was performed.');
});

在url之后调用$ .get()跳过[,data],然后传递成功回调。

3 个答案:

答案 0 :(得分:5)

是的,即使从中间也可以跳过可选参数。 jQuery查看参数的类型以确定哪个是哪个。看一下jQuery.load的签名:

.load(url [, data] [, complete(responseText, textStatus, XMLHttpRequest)])

以下工作符合预期:

.load("test.php")
.load("test.php", {foo: bar})
.load("test.php", {foo: bar}, function(){})
.load("test.php", function(){}) // you skipped the 2nd parameter? no.

您会注意到这三个参数是:stringobjectfunction。在函数内部,jQuery可以轻松检查传递的参数数量及其类型。如果它注意到第二个参数是一个函数,它将假定跳过data参数并采取相应的行动。

令您惊讶的是,还有另一个具有不同签名的jQuery.load函数,它完全不同:

.load(handler(eventObject))
.load([eventData], handler(eventObject))

同样,jQuery可以通过查看参数来确定要触发的方法。

答案 1 :(得分:1)

不像你可能习惯的那样。某些函数可能会将对象作为选项,例如$.ajax

$.ajax({
    url: 'whatever',
    data: {some: 'thing'}
});

相反:

$.ajax('whatever', {
    data: {some: 'thing'}
});

使用前一种形式可以省略URL并使用默认值。 (不是最好的例子,但它是我能想到的所有jQuery中唯一的一个。你有特定的案例吗?)

答案 2 :(得分:1)

这不是jQuery的问题,因为它更多地与JavaScript本身的功能有关。 jQuery函数是利用参数创建的。传递函数的参数有类型。我们可以测试这些参数的类型,从而确定它们的用途。

function foo( show, text ) {

    if ( typeof show === "function" ) show( text );

    else if ( !show ) alert( text );

}

我们使用typeof来查找类型。如果从函数调用中排除了一个参数,则其类型为undefinedundefined是一种虚假的类型。其他虚假类型包括0falseNaN,空字符串("")和null。我们可以使用逻辑NOT运算符!来测试变量falsy-ness。

接下来,如果我们知道show是一个函数,我们可以将它用作函数并使用参数text调用它。

foo(function (text) { alert(text); }, "Hello World"); // alerts "Hello World"