1. โมเดลเหตุการณ์แบบดั้งเดิม
มีข้อ จำกัด ในรูปแบบเหตุการณ์แบบดั้งเดิม
โมเดลอินไลน์ใช้ในรูปแบบของแอตทริบิวต์แท็ก HTML และผสมกับ HTML วิธีนี้ทำให้เกิดปัญหากับการดัดแปลงและการขยายอย่างไม่ต้องสงสัยและไม่ค่อยได้ใช้
โมเดลสคริปต์เขียนฟังก์ชั่นการประมวลผลเหตุการณ์ลงในไฟล์ JS รับองค์ประกอบจากหน้าเพื่อผูกฟังก์ชันเหตุการณ์ที่เกี่ยวข้องเพื่อทริกเกอร์การดำเนินการ แต่ก็มีข้อบกพร่อง:
1. เหตุการณ์หนึ่งผูกพันฟังก์ชั่นการฟังเหตุการณ์หลายรายการหลังแทนที่อดีต
2. การผูกซ้ำจะต้องถูก จำกัด
3. มาตรฐานวัตถุเหตุการณ์
2. การเชื่อมเหตุการณ์ที่ทันสมัย
เหตุการณ์ระดับ DOM2 กำหนดสองวิธีสำหรับการเพิ่มและลบเหตุการณ์: addeventListener () และ removeEventListener () พวกเขาได้รับสามพารามิเตอร์: ชื่อเหตุการณ์ฟังก์ชั่นเดือดหรือค่าบูลีนที่จับได้
ตามลําดับเช่นมีวิธีการที่คล้ายกันสองวิธีที่แนบมา () และ detachevent () แต่สองวิธีของ IE มีปัญหาอื่น ๆ : มันเป็นไปไม่ได้ที่จะผ่านวัตถุนี้ (ใน IE points ไปยังหน้าต่าง) คุณสามารถใช้วิธีการโทร
ฟังก์ชั่น addevent (obj, type, fn) {ถ้า (typeof obj.addeventListener! = 'undefined') {obj.addeventListener (ประเภท, fn, false); } อื่นถ้า (obj.attachevent! = 'undefined') {obj.attachevent ('on' + type, function () {fn.call (obj, window.event);}); -อย่างไรก็ตามเนื่องจากฟังก์ชั่นที่ไม่ระบุชื่อจะถูกดำเนินการเมื่อเพิ่มพวกเขาจึงไม่สามารถลบได้หลังจากเพิ่ม; นอกจากนี้วิธีการ IE ที่ได้รับจาก IE จะมีปัญหาเช่นการดำเนินการที่ไม่ประสบความสำเร็จของเหตุการณ์ที่มีผลผูกพันตามลำดับและการรั่วไหลของหน่วยความจำ
เพื่อแก้ปัญหาชุดนี้จำเป็นต้องห่อหุ้มวิธีการเพิ่มเติมและใช้มาตรฐานระดับ DOM2 สำหรับเบราว์เซอร์อื่น ๆ สำหรับ IE การเพิ่มและการลบตามโหมดดั้งเดิมจะถูกนำมาใช้ ความคิดคือ:
1. การเพิ่มคือการใช้ตารางแฮชของ JS เพื่อจัดเก็บเหตุการณ์วัตถุกำหนดค่า ID ให้กับแต่ละเหตุการณ์ของวัตถุและพิจารณาก่อนว่าฟังก์ชันการประมวลผลเดียวกันนั้นมีอยู่ในลำดับของการเพิ่มหรือไม่ หากไม่มีอยู่ให้เพิ่มฟังก์ชั่นการเชื่อมโยงเหตุการณ์ไปยังตารางแฮชในทางกลับกัน สิ่งนี้แก้ปัญหาการไม่สามารถดำเนินการตามลำดับและเพิ่มเติมซ้ำได้
2. เมื่อลบมันจะถูกใช้เพื่อตัดสินการจับคู่ของฟังก์ชั่นการสำรวจ ถ้ามีอยู่มันจะถูกลบ
สรุป:
ฉันไม่ได้มีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับเหตุการณ์ JS ที่มีผลผูกพันมาก่อนและฉันยังอยู่ในรูปแบบการผูกมัดเหตุการณ์แบบดั้งเดิมและฉันก็ยังมีความเข้าใจที่ตื้นเกินไปเกี่ยวกับการใช้งานโปรแกรม ครั้งนี้เมื่อฉันเรียนรู้ห้องสมุด encapsulation ฉันได้เรียนรู้แอปพลิเคชันเชิงวัตถุมากมายใน JS แม้ว่าห้องสมุด JS เช่น JQuery ได้รับผลกระทบที่ดีของกลไกการผูกมัดข้อมูล แต่ฉันก็รู้เหตุผล แต่ฉันไม่รู้ว่าทำไมและฉันรู้สึกว่าถ้าฉันมีความรู้สึกที่ถูกเก็บไว้ในที่มืดฉันจะวิเคราะห์การใช้งานที่เฉพาะเจาะจงด้วยตัวเอง ฉันยังตระหนักว่าการทำงานที่ดีของโปรแกรมที่เข้ากันได้และหลากหลายฉันต้องพิจารณาเนื้อหาจำนวนมากและแก้ปัญหามากมายและฉันค่อยๆเคลียร์ปัญหาเหล่านี้มากมาย