çizgi kütüphanesinin kaynak koduna kazma, ben o _.each
bulunan her edilebilen bir ECMAScript 5 API Array.forEach
dayanır: Fark ettimjQuery.each neden kullanılabilir olduğunda Array.forEach güvenmiyor bir nedeni var mı?
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;
}
}
}
}
};
o jQuery.each (statik bir değil, bir ait .each yöntem jQuery sarıcı), forEach
'un kullanılabilir olup olmadığına bakılmaksızın, sadece geri arama işlevini çağıran geleneksel bir for
yapar. Özlediğim bir sebep var mı?
jQuery bir nesne değil, bir dizidir. Array yöntemini kullanmak için jQuery çağrısını zincirleyebilmek için bir dizi ile nodeList benzeri nesne arasında ileri ve geri dönüş yapmanız gerekir. – kennebec
@kennebec $ .each(), not .each() hakkında konuşuyorum. Soruyu daha açık hale getirmek için düzenledim. –
Olası bir açıklama, jQuery'nin '.each()' işlevinin '.forEach 'ile tam olarak aynı arayüze sahip olmamasıdır, böylece ikisi birbirinin yerine kullanılamaz. JQuery uygulamasının ilk olarak uygulanması durumunda, mevcut olduğunda .forEach'i kullanmak için API'lerini kırmaları/değiştirmeleri gerekir. – jfriend00