6
尽管挖掘到下划线库的源代码,我发现在该_.each
依赖于ECMAScript的5 API Array.forEach
可用时:是否有理由为什么jQuery.each不依赖Array.forEach时可用?
var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
} else if (obj.length === +obj.length) {
for (var i = 0, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) {
return;
}
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) {
return;
}
}
}
}
};
我注意到jQuery.each(静态的,而不是a的.each方法jQuery wrapper)只是调用回调函数的传统for
,不管forEach
是否可用。我错过了那个原因吗?
jQuery是一个对象,而不是一个数组。你将不得不在数组和类nodeList对象之间来回转换,以便能够链接jQuery调用以使用Array方法。 – kennebec 2013-02-22 04:57:18
@kennebec我在说$ .each(),而不是.each()。我编辑了这个问题,使之更加清晰。 – 2013-02-22 05:18:10
一个可能的解释是jQuery的'.each()'与'.forEach'没有完全相同的接口,所以两者不能互换。如果jQuery首先实现了它们的实现,那么他们将不得不中断/更改其API,以便在出现时使用.forEach。 – jfriend00 2013-02-22 05:19:30