1. نموذج الحدث التقليدي
هناك قيود في نماذج الأحداث التقليدية.
يتم استخدام النموذج المضمن في شكل سمات علامة HTML ويتم خلطها مع HTML. لا شك أن هذه الطريقة تسبب مشاكل في التعديل والتمديد ونادراً ما يتم استخدامها.
يكتب نموذج البرنامج النصي وظائف معالجة الأحداث في ملف JS ، ويحصل على عناصر من الصفحة لربط وظائف الحدث المقابلة لتنفيذ. ولكن هناك أيضا أوجه القصور:
1. حدث واحد يربط وظائف الاستماع متعددة الأحداث ، ويتجاوز الأخير الأول.
2. يجب تقييد الربط المتكرر
3. توحيد كائنات الأحداث
2. الحدث الحديث ملزم
تحدد الأحداث على مستوى DOM2 طريقتين لإضافة أحداث إضافة وحذفها: AddEventListener () و RemoveEventListener (). يتلقون ثلاثة معلمات: اسم الحدث أو الوظيفة أو الفقاعات أو القيمة المنطقية الملتقطة (يعني التقاط الحقيقي ، يعني الفقاعات الخاطئة).
في المقابل ، يوفر IE طريقتين متشابهتين متاحفين () و detachevent () ، ولكن لدى طريقتين IE مشاكل أخرى: من المستحيل تمرير هذا الكائن (هذا في نقاط IE إلى النافذة) يمكنك استخدام طريقة الاتصال لانتحال شخصية ما:
وظيفة addEvent (obj ، type ، fn) {if (typeof obj.addeventListener! = 'undefined') {obj.addeventListener (type ، fn ، false) ؛ } آخر إذا (obj.attachevent! = 'undefined') {obj.attachevent ('on' + type ، function () {fn.call (obj ، window.event) ؛}) ؛ }} ؛ومع ذلك ، نظرًا لأن الوظائف المجهولة يتم تنفيذها عند الإضافة ، لا يمكن حذفها بعد الإضافة ؛ بالإضافة إلى ذلك ، فإن أساليب IE التي توفرها IE أيضًا لديها مشاكل مثل التنفيذ غير الناجح لأحداث الربط في تسرب التسلسل والذاكرة.
من أجل حل هذه السلسلة من المشكلات ، من الضروري زيادة تغليف الطريقة واستخدام معيار مستوى DOM2 للمتصفحات الأخرى. بالنسبة إلى IE ، تم اعتماد إضافة وحذف على أساس الوضع التقليدي. الفكرة هي:
1. الإضافة هو استخدام جدول تجزئة JS لتخزين أحداث الكائنات ، وتعيين قيمة معرف لكل حدث كائن ، وتحديد أولاً ما إذا كانت وظيفة المعالجة نفسها موجودة بترتيب الإضافة. إذا لم يكن موجودًا ، أضف وظيفة ربط الحدث إلى جدول التجزئة بدوره. هذا يحل مشكلة عدم القدرة على التنفيذ بالتسلسل والإضافات المتكررة.
2. عند الحذف ، يتم استخدامه للحكم على مطابقة وظيفة اجتياز. إذا كان موجودًا ، يتم حذفه.
تلخيص:
لم يكن لدي فهم أعمق لربط حدث JS من قبل ، وقد بقيت في نموذج ربط الحدث التقليدي ، وما زلت لدي فهم ضحل لتنفيذ البرنامج. هذه المرة ، عندما تعلمت مكتبة التغليف ، تعلمت الكثير من التطبيقات الموجهة للكائنات على JS. على الرغم من أن مكتبات JS مثل JQuery قد حققت تأثيرًا جيدًا لتغليف آليات ربط البيانات ، إلا أنني أعرف فقط السبب ، لكنني لا أعرف السبب ، وأشعر أنه إذا كان لدي شعور بالاحتفاظ بالظلام ، فسوف أقوم بتحليل التنفيذ المحدد بنفسي ، وسأشعر بالتنوير المفاجئ. أدرك أيضًا أنه لأقوم بعمل جيد لبرنامج متوافق ومتعدد الاستخدامات ، أحتاج إلى التفكير في الكثير من المحتوى وحل العديد من المشكلات ، وأنا أقوم بتطهير الكثير من هذه المشكلات تدريجياً.