Tut addEventListener (und removeEventListener) stack?
Angesichts der unten:
object.addEventListen(eventType01,handler01);
object.addEventListen(eventType01,handler01);
object.removeEventListener(eventType01,handler01);
Wie viele Ereignis-Listener für eventType01 auf Objekt? Eine oder keine?
- Fragen wie diese sind in der Regel schneller einfach testen und sehen, was passiert, als zu Fragen. Kritisiert nicht Ihre Frage (es ist mehr wissen auf) aber gerade, darauf hinzuweisen.
- als Antwort Punkte aus (durch die Kommentare), es gibt mehr zu diesem als einem einfachen test zeigen konnte. Vielleicht ist es nicht wirklich ein gutes Beispiel für eine Frage, die kann "einfach ausprobiert".
- Was die Kommentare, die darauf hinweisen, dass es mehr im hintergrund, als er erklärte, und seine eigentliche Frage war nicht die Frage, fragte er. Also, was soll er gefragt haben, war: "ich habe das getestet und habe das und das Ergebnis. Ist dieses Ergebnis normal Verhalten?"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Null. Wenn Sie rufen Sie addEventListener (), mit der exakt gleichen Argumente, die mehr als einmal alle nachfolgenden Aufrufe nach dem ersten "im hintergrund fehl." Rufen Sie fügen Sie so viele Male, wie Sie wollen, aber das einzige entfernen, abwischen wird der listener entfernt.
EDIT: eine Andere Sache im Auge zu behalten ist, dass es keine Strafe für den Aufruf mehrere identische removeEventListener () - Funktionen auf das gleiche Objekt, abgesehen von der unnötigen performance-overhead. Keine tödlichen Fehler wird auftreten, es wird einfach nur "still fail" viel die gleiche Weise wiederholte, identische Aufrufe von addEventListener wird.
EDIT 2: Antwort @ThomasM :: wenn Ihre Zuhörer "feuert zweimal" dann haben Sie nicht genau die gleichen Hörer. Versuchen Sie diese quick-and-dirty-code in Bild 1 in eine fla-Datei, die hat einen movieclip square so zu wie ein Kind:
Beachten Sie, dass die Ausgabe, wenn Sie auf den movieclip ist genau eine trace-Aktion.
Nun fügen Sie diese Zeile am Ende des Codes
Obwohl Sie Hinzugefügt foo als listener für 3 mal klicken, diesen einen Anruf tötet den Hörer komplett.
Also, wenn Sie erleben ein Problem, wo "derselbe listener" Feuer zweimal, dann ist wahrscheinlich was Sie tun, ist so etwas wie dieses:
Das wird auf jeden Fall "fire-doppelt", da die listener-Funktionen SIND NICHT DIE GLEICHEN. Sie führen die gleichen Handlungen, aber Sie verweisen nicht auf identische Positionen im Speicher. Sie deuten nicht auf der gleichen function-Objekt. Außerdem ist dies sehr schlechte Praxis, weil Sie keine Möglichkeit haben, tatsächlich entfernen Sie die Zuhörer. Wie würdest du es tun? Sie haben keinen Bezug zu Ihnen.