$.each v.s. $.fn.each
fangbinwei opened this issue · 0 comments
fangbinwei commented
$.each
// callback(index, item)反人类 迭代类数组或者对象
$.each = function(elements, callback){
var i, key
if (likeArray(elements)) {
for (i = 0; i < elements.length; i++)
// 注意 使用了call, 遍历dom的时候会很有用
if (callback.call(elements[i], i, elements[i]) === false) return elements
} else {
for (key in elements)
if (callback.call(elements[key], key, elements[key]) === false) return elements
}
$.each方法既可以对类数组使用, 也可以对一般的对象使用, callback返回false
, 迭代提前结束
$.fn.each
each: function(callback){
emptyArray.every.call(this, function(el, idx){
// callback(index, item)反人类
return callback.call(el, idx, el) !== false
})
return this
}
$.each使用Array.prototype.every
方法来实现,主要是用来对Zepto对象使用, callback如果return false
,则迭代提前结束, 注意判断用的是!==
全不等, 只有false!==false
返回 false
.
Zepto本质上是new了一个Zepto对象, 把DOM对象按index放进这个Zepto对象.这个Zepto对象的__proto__
指向Z.prototype/zepto.Z.prototype -> $.fn
. $.fn
的很多方法都是通过$.fn.each(this.each)
来进行遍历的.