阅读
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
但是它如何自己返回一个数组呢?
答案 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;
}