1. Model acara tradisional
Ada keterbatasan dalam model acara tradisional.
Model inline digunakan dalam bentuk atribut tag HTML dan dicampur dengan HTML. Metode ini tidak diragukan lagi menyebabkan masalah dengan modifikasi dan ekstensi dan jarang digunakan.
Model skrip menulis fungsi pemrosesan acara ke dalam file JS, memperoleh elemen dari halaman untuk mengikat fungsi acara yang sesuai untuk memicu eksekusi. Tapi ada juga kekurangan:
1. Satu acara mengikat beberapa fungsi mendengarkan acara, yang terakhir mengesampingkan yang pertama.
2. Ikatan berulang harus dibatasi
3. Standarisasi Objek Acara
2. Ikatan Acara Modern
Peristiwa tingkat DOM2 menentukan dua metode untuk menambah dan menghapus acara: addeventListener () dan remeVentListener (). Mereka menerima tiga parameter: nama acara, fungsi, menggelegak atau menangkap nilai boolean (benar berarti penangkapan, palsu berarti menggelegak).
Sejalan dengan itu, IE menyediakan dua metode serupa terlampir () dan detachevent (), tetapi dua metode IE memiliki masalah lain: tidak mungkin untuk lulus objek ini (ini di titik titik ke jendela) Anda dapat menggunakan metode panggilan untuk menyamar sebagai objek:
fungsi addevent (obj, type, fn) {if (typeof obj.addeventListener! = 'tidak terdefinisi') {obj.addeventListener (type, fn, false); } lain jika (obj.attachevent! = 'tidak terdefinisi') {obj.attachevent ('on' + type, function () {fn.call (obj, window.event);}); }};Namun, karena fungsi anonim dieksekusi saat menambahkan, mereka tidak dapat dihapus setelah menambahkan; Selain itu, metode IE yang disediakan oleh IE juga akan memiliki masalah seperti eksekusi yang gagal mengikat peristiwa dalam urutan dan kebocoran memori.
Untuk menyelesaikan serangkaian masalah ini, perlu untuk merangkum metode lebih lanjut dan menggunakan standar level DOM2 untuk browser lain. Untuk IE, menambahkan dan menghapus berdasarkan mode tradisional diadopsi. Idenya adalah:
1. Menambahkan adalah menggunakan tabel hash JS untuk menyimpan peristiwa objek, menetapkan nilai ID untuk setiap peristiwa objek, dan terlebih dahulu menentukan apakah ada fungsi pemrosesan yang sama dalam urutan penambahan. Jika tidak ada, tambahkan fungsi pengikatan peristiwa ke tabel hash secara bergantian. Ini memecahkan masalah ketidakmampuan untuk mengeksekusi secara berurutan dan penambahan berulang.
2. Saat menghapus, digunakan untuk menilai pencocokan fungsi traversal. Jika ada, itu dihapus.
Meringkaskan:
Saya tidak memiliki pemahaman yang lebih dalam tentang ikatan acara JS sebelumnya, dan saya bahkan tetap dalam model pengikatan acara tradisional, dan saya masih memiliki pemahaman yang terlalu dangkal tentang implementasi program. Kali ini, ketika saya mempelajari perpustakaan enkapsulasi, saya belajar banyak aplikasi yang berorientasi objek di JS. Meskipun perpustakaan JS seperti JQuery telah mencapai efek enkapsulasi yang baik dari mekanisme pengikatan data, saya hanya tahu alasannya, tetapi saya tidak tahu mengapa, dan saya merasa bahwa jika saya merasa disimpan dalam kegelapan, saya akan menganalisis implementasi spesifik sendiri, dan saya akan merasakan pencerahan tiba -tiba. Saya juga menyadari bahwa untuk melakukan pekerjaan yang baik dari program yang kompatibel dan serbaguna, saya perlu mempertimbangkan banyak konten dan menyelesaikan banyak masalah, dan saya secara bertahap membersihkan banyak masalah ini.