يقدم
وضع Iterator: يوفر طريقة لطلب العناصر الفردية في كائن إجمالي دون تعريض التمثيل الداخلي للكائن.
العديد من خصائص التكرار هي:
1. الوصول إلى محتويات كائن إجمالي دون تعريض تمثيله الداخلي.
2. توفير واجهة موحدة لاجتياز هياكل التجميع المختلفة ، وبالتالي دعم نفس الخوارزمية للعمل على هياكل تجميع مختلفة.
3. تغيير بنية التجميع حيث يوجد التكرار أثناء اجتيازه قد يسبب مشاكل (على سبيل المثال ، لا يُسمح بالتعديل في العنصر في foreach في C#).
نص
في التكرار العام ، نحتاج إلى امتلاك طريقتين على الأقل ، Hasnext () و Next () ، حتى نتمكن من اجتياز جميع الكائنات. دعونا أولاً نقدم مثالاً:
نسخة الكود كما يلي:
var agr = (function () {
فهرس var = 0 ،
البيانات = [1 ، 2 ، 3 ، 4 ، 5] ،
طول = data.length ؛
يعود {
التالي: الدالة () {
VAR Element ؛
if (! this.hasnext ()) {
العودة لاغية.
}
العنصر = البيانات [الفهرس] ؛
الفهرس = فهرس + 2 ؛
عنصر العودة ؛
} ،
hasnext: function () {
فهرس العودة <الطول ؛
} ،
الترجيع: وظيفة () {
الفهرس = 0 ؛
} ،
الحالي: Function () {
إرجاع بيانات [الفهرس] ؛
}
} ؛
} ()) ؛
طريقة الاستخدام هي نفسها كما في C#:
نسخة الكود كما يلي:
// نتيجة التكرار هي: 1 ، 3 ، 5
بينما (agg.hasnext ()) {
console.log (agg.next ()) ؛
}
بالطبع ، يمكنك أيضًا إعادة تعيين البيانات من خلال طرق إضافية ثم متابعة العمليات الأخرى:
نسخة الكود كما يلي:
// إعادة ضبط
Agg.Rewind () ؛
console.log (agg.current ()) ؛ // 1
مثال تطبيق jQuery
التكرار الشهير جدا في jQuery هو طريقة $ .EACH. من خلال كل واحد ، يمكننا تمرير وظيفة إضافية ثم التكرار على جميع عناصر العناصر ، على سبيل المثال:
نسخة الكود كما يلي:
دولار.
console.log (index + ':' + value) ؛
}) ؛
//أو
$ ('li'). كل (دالة (فهرس) {
console.log (index + ':' + $ (this) .text ()) ؛
}) ؛
لخص
سيناريو استخدام ITerator هو: غالبًا ما تختلف نتائج المجموعة بطرق مختلفة. لا نريد فضح بنيتها الداخلية ، لكننا ندع رمز العميل أيضًا وصولًا إلى العناصر بشفافية. في هذه الحالة ، يمكننا استخدام وضع التكرار.