Trong khi đào vào mã nguồn của thư viện gạch, tôi thấy ở _.each
dựa trên ECMAScript 5 API Array.forEach
bất cứ khi nào có sẵn:Có lý do gì khiến jQuery.each không dựa vào Array.forEach khi có sẵn không?
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;
}
}
}
}
};
tôi nhận thấy rằng jQuery.each (một trong những tĩnh, không phải là .each phương pháp của một jQuery wrapper) không chỉ là một for
truyền thống gọi các chức năng gọi lại, không có vấn đề nếu forEach
có sẵn hay không. Có lý do nào khiến tôi bỏ lỡ không?
jQuery là một đối tượng chứ không phải mảng. Bạn sẽ phải chuyển đổi qua lại giữa một mảng và đối tượng giống như nodeList để có thể kết nối cuộc gọi jQuery để sử dụng phương thức Array. – kennebec
@kennebec Tôi đang nói về $ .each(), chứ không phải .each(). Tôi đã chỉnh sửa câu hỏi để làm rõ hơn. –
Một giải thích có thể là jQuery '.each()' không có giao diện giống hệt '.forEach' vì vậy cả hai không thể hoán đổi cho nhau. Nếu jQuery đã thực hiện đầu tiên của họ, sau đó họ sẽ phải phá vỡ/thay đổi API của họ để sử dụng .forEach khi có mặt. – jfriend00