Während in die Quellcode des Unterstrich Bibliothek Graben, ich in diesen _.each
stützt sich auf einem ECMAScript 5 API Array.forEach
wann immer verfügbar gefunden:Gibt es einen Grund, warum jQuery.each nicht auf Array.forEach angewiesen ist, wenn es verfügbar ist?
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;
}
}
}
}
};
ich bemerkte, dass jQuery.each (der statische, nicht das .each Verfahren zur Herstellung eines jQuery Wrapper) tut nur eine traditionelle for
, die die Callback-Funktion aufruft, egal ob forEach
verfügbar ist oder nicht. Gibt es einen Grund dafür, den ich verpasst habe?
jQuery ist ein Objekt, kein Array. Sie müssten zwischen einem Array und dem nodeList-ähnlichen Objekt hin und her konvertieren, um den jQuery-Aufruf zur Verwendung der Array-Methode verketten zu können. – kennebec
@kennebec Ich spreche über $ .Each(), nicht .Each(). Ich habe die Frage bearbeitet, um sie klarer zu machen. –
Eine mögliche Erklärung ist, dass jQuerys '.each()' nicht genau die gleiche Schnittstelle wie '.forEach' hat, so dass die beiden nicht austauschbar sind. Wenn jQuery ihre Implementierung zuerst hatte, dann müssten sie ihre API brechen/ändern, um .forEach zu verwenden, wenn sie vorhanden ist. – jfriend00