2013-02-22 11 views
6

अंडरस्कोर पुस्तकालय के स्रोत कोड में खुदाई करते समय, मुझे लगता है कि _.each में पाया एक ECMAScript 5 एपीआई Array.forEach जब भी उपलब्ध पर निर्भर करता है:क्या कोई कारण है कि jQuery.each Array पर भरोसा नहीं करता है। उपलब्ध होने पर प्रत्येक?

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 (स्थिर एक, न कि एक के .each विधि jQuery wrapper) केवल एक पारंपरिक for करता है जो कॉलबैक फ़ंक्शन को कॉल करता है, इससे कोई फर्क नहीं पड़ता कि forEach उपलब्ध है या नहीं। क्या इसके लिए कोई कारण है कि मुझे याद आया?

+2

jQuery एक वस्तु है, एक सरणी नहीं है। आपको सरणी विधि का उपयोग करने के लिए jQuery कॉल को चेन करने में सक्षम होने के लिए एक सरणी और नोडलिस्ट-जैसी ऑब्जेक्ट के बीच आगे और पीछे परिवर्तित करना होगा। – kennebec

+0

@kennebec मैं $ .each(), नहीं .each() के बारे में बात कर रहा हूं। मैंने इसे और अधिक स्पष्ट करने के लिए प्रश्न संपादित किया। –

+0

एक संभावित स्पष्टीकरण यह है कि jQuery की '.each()' में बिल्कुल समान इंटरफ़ेस नहीं है, क्योंकि'forEach' है, इसलिए दोनों अदला-बदले नहीं हैं। यदि jQuery के पहले उनका कार्यान्वयन था, तो उन्हें उपयोग करने के लिए अपने एपीआई को तोड़ना/बदलना होगा। वर्तमान में उपलब्ध होने पर। – jfriend00

उत्तर

1

शायद यह इसलिए है क्योंकि दोनों कार्यान्वयन में भिन्न हैं - Array.forEach सरणी तत्व को पहले पैरामीटर के रूप में पास करता है, और सूचकांक दूसरे के रूप में होता है। jQuery.each पहले इंडेक्स पास करता है, सरणी तत्व भेजता है।

वास्तव में शायद सबसे अच्छा चर्चा स्रोत ढेर अतिप्रवाह पर यहीं है:

jQuery.each implementation differs from native Array.forEach

उनका अनुमान किया जा रहा है कि यह एक गलती थी - इतने सारे साइटों jQuery.each को लागू किया है, सूचकांक की उम्मीद पहले कि वे संभवतः उन्हें उलट नहीं कर सकते हैं।

संबंधित मुद्दे