我在这方面咨询了jQuery的来源,但我必须承认这可能超出了我的理解 – 或者我正在寻找错误的地方.
https://github.com/jquery/jquery/blob/master/src/core.js
在第222行附近有一个看起来递归的函数,然后在第566行附近还有另一个在.extend()命名空间中声明的函数.
我只是好奇 – 这究竟是如何工作的?例如,当我打电话时:
$('.item').each(function(){
// Do Something
});
如何循环遍历DOM元素数组,何时停止,它如何应用该函数?它不能做
$('.item').doThis()
因为doThis()可能不是该对象的成员.
请赐教:)谢谢.
最佳答案
不,它不是递归的. line 222上的函数是jQuery原型($.fn)上的函数,而它调用的函数是jQuery.each – 一个在line 566中定义的静态属性.注意
extend
是如何工作的:如果没有给出要扩展的对象,它使用这个.它在代码的不同部分都应用于jQuery和jQuery.fn.
so how exactly does this work?
$obj.each(callback)调用$.fn.each方法,该方法在jQuery实例(DOM包装器)本身上应用$.each:line 223.
现在,在$.each中,有四种情况:有或没有提供的args数组,以及类似数组的结构或其他对象.您没有传递额外的args,并且jQuery实例具有length属性并且在数字索引中具有DOM元素,因此将执行line 596中的循环.所以你的电话相当于
for (var i=0,len=$obj.length; i