6

在 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] ,然后传递成功回调。

4

3 回答 3

7

是的,甚至可以从中间跳过可选参数。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 可以通过查看参数来确定要触发的方法。

于 2012-08-25T21:59:40.700 回答
1

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

function foo( show, text ) {

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

    else if ( !show ) alert( text );

}

我们typeof用来查找类型。如果从函数调用中排除参数,则其类型为undefined. undefined是一个假类型。其他虚假类型是0, false, NaN, 空字符串 ( "") 和null. 我们可以使用逻辑非运算符来测试变量的虚假性!

继续前进,如果我们知道这show是一个函数,我们可以将它用作函数并使用参数调用它text

foo(function (text) { alert(text); }, "Hello World"); // alerts "Hello World"
于 2012-08-25T22:23:27.507 回答
1

不像你可能习惯的那样。有些函数可能需要一个对象作为选项,例如$.ajax

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

相对于:

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

使用前一种形式将允许您省略 URL 并使用默认值。(不是最好的例子,但它是我在所有 jQuery 中临时想到的唯一一个。你有一个特殊的案例吗?)

于 2012-08-25T22:00:00.903 回答