jQuery如何在仍然返回数组时链接函数?

时间:2014-08-12 17:45:45

标签: javascript jquery function

阅读

How does jQuery accomplish chaining of commands?how does jquery chaining work?

我仍然不禁想知道jQuery中可能出现这样的事情

var a = $('body')
// a returns [<body></body>], an array.

a.click()
// Seems like this should return an error if a returns an array, not a function.

链接的SO答案只告诉我如何做

之类的事情
a.b().c()

这是a()我还是不明白。我知道链接的工作方式是返回this但是它如何自己返回一个数组呢?

1 个答案:

答案 0 :(得分:1)

使用jQuery源代码查看器站点$(http://james.padolsey.com/jquery/#v=1.9.1&fn= $)的定义如下:

<强> $

function (selector, context) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init(selector, context, rootjQuery);
}

注意它是从init()返回的。在init(http://james.padolsey.com/jquery/#v=1.9.1&fn=init)内部,我们看到最后它调用了一个名为makeArray的函数:

<强>初始化

function (selector, context, rootjQuery) {
    var match, elem;

// rest of function defintion

    return jQuery.makeArray(selector, this);
}

这让我们回答了“jQuery如何在仍然返回数组的情况下实现链接的问题?”

makeArray(http://james.padolsey.com/jquery/#v=1.9.1&fn=jQuery.makeArray)看起来像这样:

<强> makeArray

function (arr, results) {
    var ret = results || [];

    if (arr != null) {
        if (isArraylike(Object(arr))) {
            jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
        } else {
            core_push.call(ret, arr);
        }
    }

    return ret;
}