1. পিছনের সামঞ্জস্য
জাভাস্ক্রিপ্ট ECMAScript এর একটি বাস্তবায়ন । এই ফাংশনগুলির বেশিরভাগ ইসমাস্ক্রিপ্ট 5 (ইএস 5) এ প্রবর্তিত হয়েছিল তবে এখনও বাজারে উল্লেখযোগ্য পরিমাণে অংশীদার থাকা অনেক পুরানো ব্রাউজারগুলি এই ফাংশনগুলিকে সমর্থন করে না (দেখুন ECMAScript 5 সামঞ্জস্যতা সারণী ), এটিগুলির মধ্যে উল্লেখযোগ্য IE8 being
সাধারণত গ্রন্থাগারগুলি যদি না থাকে তবে তাদের নিজস্ব পলিফিল ব্যবহার করা থাকলে দেশীয় বাস্তবায়নে ফিরে আসবে, উদাহরণস্বরূপ অ্যাঙ্গুলারজেএস- এর বাস্তবায়নটি দেখুন ( কৌণিক.জেএস এল203-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 সংস্করণ কিনা check তা না হলে এটি ইতিমধ্যে নির্দিষ্ট ফাংশন (দেশীয় সংস্করণ) ব্যবহার করে:
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context);
}
2. সুবিধা
নেটিভ জাভাস্ক্রিপ্ট Array.prototype.forEach
হ'ল একটি উদাহরণের সাথে একচেটিয়া পদ্ধতি Array
, তবে বেশিরভাগ Object
কোনওটিই পুনরাবৃত্ত।
এই কারণে অনেক গ্রন্থাগার স্রষ্টা তাদের ফাংশনগুলি বহুতল করে তোলে (একাধিক ধরণের ইনপুট হিসাবে গ্রহণ করতে সক্ষম)। আসুন উপরে অ্যাঙ্গুলারজেএস কোডটি নেওয়া যাক এবং এটি কী গ্রহণ করে তা দেখুন:
কার্যাদি :
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);
}
}
}
উপসংহার
আপনি দেখতে পাচ্ছেন যে AngularJS বেশিরভাগ জাভাস্ক্রিপ্ট অবজেক্টের উপরে পুনরাবৃত্তি করবে, যদিও এটি দেশীয় ফাংশনের মতো একইভাবে কাজ করে যা অনেক বেশি বিভিন্ন ধরণের ইনপুট গ্রহণ করে এবং এইভাবে লাইব্রেরিতে একটি বৈধ সংযোজন এবং ES5 ফাংশন আনার উপায় হিসাবে লিগ্যাসি ব্রাউজারগুলিতে।