1. traditionelles Ereignismodell
In traditionellen Ereignismodellen gibt es Einschränkungen.
Das Inline -Modell wird in Form von HTML -Tag -Attributen verwendet und mit HTML gemischt. Diese Methode verursacht zweifellos Probleme bei der Änderung und Erweiterung und wird selten angewendet.
Das Skriptmodell schreibt Ereignisverarbeitungsfunktionen in eine JS -Datei und erhält Elemente von der Seite, um die entsprechenden Ereignisfunktionen zu binden, um die Ausführung auszulösen. Es gibt aber auch Mängel:
1. Ein Ereignis bindet mehrere Ereignis -Hörfunktionen, die letztere überschreien die ersteren.
2. Die wiederholte Bindung muss eingeschränkt werden
3.. Ereignisobjekte standardisieren
2. moderne Ereignisbindung
Ereignisse auf DOM2-Ebene definieren zwei Methoden zum Hinzufügen und Löschen von Ereignissen: AddEventListener () und REMEDEVENTLISTENER (). Sie erhalten drei Parameter: Ereignisname, Funktion, sprudelnder oder erfasstes boolescher Wert (wahre Mittelaufnahme, falsche Mittelwerte sprudeln).
Entsprechend bietet der IE zwei ähnliche Methoden an, die beigefügt () und detaachEvent () beigefügt sind, aber die beiden Methoden von IE haben andere Probleme: Es ist unmöglich, dieses Objekt zu übergeben (dies in IE -Punkten zu Fenster) Sie können die Anrufmethode verwenden, um ein Objekt auszugeben:
Funktion addEvent (obj, type, fn) {if (typeof obj.addeventListener! } else if (obj.attachEvent! }};Da jedoch beim Hinzufügen anonyme Funktionen ausgeführt werden, können sie nach dem Hinzufügen nicht gelöscht werden. Darüber hinaus werden die IE -Methoden, die vom IE bereitgestellt werden, auch Probleme wie die erfolglose Ausführung von Bindungsereignissen in Sequenz- und Speicherlecks.
Um diese Reihe von Problemen zu lösen, ist es erforderlich, die Methode weiter zu verkapulieren und den Standard -Standard für andere Browser zu verwenden. Für den IE wird das Hinzufügen und Löschen des traditionellen Modus eingesetzt. Die Idee ist:
1. Hinzufügen wird die Hash -Tabelle von JS verwenden, um Objektereignisse zu speichern, jedem Objektereignis einen ID -Wert zuzuweisen und zuerst zu bestimmen, ob dieselbe Verarbeitungsfunktion in der Reihenfolge der Addition vorliegt. Wenn es nicht vorhanden ist, fügen Sie die Ereignisbindungsfunktion der Hash -Tabelle nacheinander hinzu. Dies löst das Problem der Unfähigkeit, nach Abfolge und wiederholten Ergänzungen auszuführen.
2. Beim Löschen wird es verwendet, um die Übereinstimmung der Traversalfunktion zu beurteilen. Wenn es existiert, wird es gelöscht.
Zusammenfassen:
Ich hatte vorher nicht viel tiefer verstanden, und ich blieb sogar im traditionellen Ereignisbindungsmodell und hatte immer noch zu flaches Verständnis für die Programmumsetzung. Als ich diesmal die Kapselungsbibliothek lernte, habe ich viele objektorientierte Anwendungen auf JS gelernt. Obwohl JS -Bibliotheken wie JQuery einen guten Einkapselungseffekt von Datenbindungsmechanismen erzielt haben, weiß ich nur den Grund, aber ich weiß nicht warum, und ich habe das Gefühl, dass ich die spezifische Implementierung selbst analysieren werde, wenn ich das Gefühl habe, im Dunkeln gehalten zu werden, und ich werde eine plötzliche Erleuchtung empfinden. Mir ist auch klar, dass ich viele Inhalte in Betracht ziehen und viele Probleme lösen muss, um viele Probleme zu lösen, um viele dieser Probleme zu lösen.