Anonyme Funktionen als Ereignis-Handler in Aktion-Skript - gut oder schlecht?

Kam ich zu AS3 von JS-Welt, und ich bekenne, dass anonyme Funktionen sind meine Schwäche. Ich Neige dazu, verwenden Sie überall. Jetzt, kommen zu AS3 ich habe gehört und gelesen, an vielen Orten, DA und Flash sind enorm schlecht im handling, garbage collection, dass man leer ist, entsorgen Sie Sie und entfernen Sie alle event-Handler und-Objekte manuell zu vermeiden, seltsame und unerklärliche memory leaks und Abstürze. Nicht sicher, welcher Teil davon ist wahr, aber ich würde gerne befolgen Sie die best practices von Anfang an.

Also meine Frage wäre - wie schlecht ist die Idee der Verwendung von anonymen Funktionen als event Handler? Betrachten Sie zum Beispiel ein code wie dieser:

addEventListener(Event.ENTER_FRAME, function() : void {
    controls.elapsed = stream.time;
});

contorls.verstrichene ist der setter, die abgesehen von der Einstellung der aktuellen Spielzeit für die video-player-updates die ganze UI und stream ist NetStream - Objekt, das die Ströme der eigentlichen video.

Gibt es genug andere Orte, wo anonyme Funktion kann den code sauberer und intuitiver. Überprüfen Sie den folgenden code für einfache fade-in-Effekt für die control bar:

public function showControls() : void
    {
        var self:Controls = this;

        if (!visible) {
            visible = true;
            fadeTimer = new Timer(30, 10);
            fadeTimer.addEventListener(TimerEvent.TIMER, function() : void {
                self.alpha += 0.1;
            });
            fadeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function() : void {
                self.alpha = 1;
            });
            fadeTimer.start();
        }
    }

Ich Total mag, wie es aussieht und passt in den code, aber ich bin besorgt über Leckagen. Während Die Veranstaltung.ENTER_FRAME-handler würde wahrscheinlich nie werden schädlich in dieser form, was über die timer-Listener. Sollte ich entfernen Sie die Zuhörer mit der Hand, oder Sie werden automatisch entfernt, sobald ich fadeTimer = null ? Ist es möglich, entfernen Sie die Zuhörer mit anonymen Funktionen richtig an?

Ich bin kein fan von anonymen Funktionen. Für ein, Sie sind hässlich, Sie kann auch nicht die Wiederverwendung der Funktion an anderer Stelle (was möglicherweise zu doppelten code), und die Letzte schaffen Sie einen Aktivierungs-Objekt, das einige performance-und memory-Auswirkungen. onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf
Gibt es irgendetwas, was ALS das nicht dazu führen, dass einige performance-und memory-Auswirkungen? 🙂 Gut, in meinem Verständnis anonyme Funktionen sind nur sinnvoll, wenn man nicht wiederverwenden, die diese Funktionen, nicht überladen wollen Klassendefinition und will die ganze Logik an einem Ort. Dies ist, wie und Wann Neige ich dazu, Sie zu benutzen. Danke für den link, ich werde es prüfen.
Hmm... "einige performance-und memory-impact", die tatsächlich stellte sich heraus, um ein Angebot sein. Was ist das für eine Aussage? Was bedeutet es, "einige"? Wenn dieser gelesen wird, indem es die Bedeutung, dann "einige" klingt wie zu vernachlässigenden Wert. Oder nicht? Wie sehr vage.
Es scheint, dass 'Aktivierungs-Objekt' ist nicht spezifisch für die ALS, sondern ist ein Teil von ECMA-standard. Und angelegt wird, für anonyme Funktionen in JS sowie. Aber das hält nicht jeder auf das web zu benutzen, richtig? Oder vielleicht WIE die Umsetzung der Funktion ist buggy und sluggy?

InformationsquelleAutor jayarjo | 2010-12-12

Schreibe einen Kommentar