1. पश्चगामी संगतता
जावास्क्रिप्ट ECMAScript का कार्यान्वयन है । उन कार्यों में से अधिकांश को ECMAScript 5 (ES5) में पेश किया गया था, हालांकि कई पुराने ब्राउज़र जो अभी भी बाजार में एक महत्वपूर्ण हिस्सा हैं, इन कार्यों का समर्थन नहीं करते हैं ( ECMAScript 5 संगतता तालिका देखें ), इनमें से सबसे उल्लेखनीय IE8 है।
आम तौर पर पुस्तकालय मूल कार्यान्वयन पर वापस आ जाएंगे यदि यह मौजूद है अन्यथा अपनी स्वयं की पॉलीफ़िल का उपयोग करें, उदाहरण के लिए आइए हम AngularJS के कार्यान्वयन ( कोणीय.js L203-257 ) को देखें:
function forEach(obj, iterator, context) {
var key;
if (obj) {
if (isFunction(obj)){
for (key in obj) {
// Need to check if hasOwnProperty exists,
// as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
iterator.call(context, obj[key], key);
}
}
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context);
} else if (isArrayLike(obj)) {
for (key = 0; key < obj.length; key++)
iterator.call(context, obj[key], key);
} else {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key);
}
}
}
}
return obj;
}
निम्न पंक्तियाँ जाँचती हैं कि forEach
विधि वस्तु पर मौजूद है या नहीं और यह AngularJS संस्करण है या नहीं। यदि यह पहले से निर्दिष्ट फ़ंक्शन (मूल संस्करण) का उपयोग नहीं करता है:
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context);
}
2. सुविधा
देशी जावास्क्रिप्ट Array.prototype.forEach
में एक उदाहरण के लिए विशेष विधि है Array
, हालांकि सबसे किसी भी Object
iterable भी है।
इस कारण से कई पुस्तकालय निर्माता अपने कार्यों को बहुरूपिक बनाते हैं (इनपुट के रूप में कई प्रकारों को स्वीकार करने में सक्षम)। चलो ऊपर AngularJS कोड लेते हैं और देखते हैं कि यह क्या इनपुट स्वीकार करता है:
कार्य :
if (isFunction(obj)){
for (key in obj) {
// Need to check if hasOwnProperty exists,
// as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
iterator.call(context, obj[key], key);
}
}
Arrays (मूल विदेशी समर्थन के साथ):
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context);
ऐरे जैसी वस्तुएं (जिसमें बिना मूल निवासी समर्थन के), स्ट्रिंग, HTMLElement, एक वैध लंबाई संपत्ति के साथ वस्तु:
} else if (isArrayLike(obj)) {
for (key = 0; key < obj.length; key++)
iterator.call(context, obj[key], key);
वस्तुओं:
} else {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key);
}
}
}
निष्कर्ष
जैसा कि आप देख सकते हैं कि AngularJS किसी भी जावास्क्रिप्ट ऑब्जेक्ट पर सबसे ज्यादा काम करेगा, हालाँकि यह उसी तरह से काम करता है जैसे कि यह देशी कार्य को अधिक भिन्न प्रकार के इनपुट को स्वीकार करता है और इस प्रकार पुस्तकालय के लिए एक मान्य अतिरिक्त है साथ ही ES5 फ़ंक्शन लाने का एक तरीका है विरासत ब्राउज़रों के लिए।