| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Klugscheisser Registriert seit: Jun 2001 Ort: Düsseldorf
Beiträge: 1.354
| Closures vs. Function.apply();
Moin! Ich baue gerade so eine Art EventDispatcher (Logger), an dessen add-Methode Funktionen übergeben werden können. Beim späteren Dispatch werden diese dann per *.apply(); aufgerufen, jedoch brauche ich dafür ein this Object, da die Funktion sonst global ausgeführt wird. Ich hätte natürlich gerne jeweils das Objekt als this, über welches zuvor die add-Funktion aufgerufen wurde. Kommt man da irgendwie dran (Außer this-Parameter in der add Funktion)? Oder muss ich auf apply verzichten und einen Riesenswitch bauen? |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Dec 2005
Beiträge: 99
|
Kannste mal nen bisschen code dazu zeigen?
__________________ http://blog.johannes-hodde.com |
| | |
| | #3 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
|
zeig bitte etwas Code, ich kann dir nicht so recht folgen. wenn du bei apply kein thisObject angibst, ist this doch automatisch das Objekt, in dem die Funktion definiert ist. Nur closures && dynamische Funktionen sind in keinem Objekt definiert, und deshalb zeigt this auf ein globales Objekt (Stage glaub ich). Also was ist das Problem? wie sieht der Code aus? und was soll passieren? |
| | |
| | #4 (permalink) | |
| Klugscheisser Registriert seit: Jun 2001 Ort: Düsseldorf
Beiträge: 1.354
| Zitat:
this ist in dem Fall übrigens nicht die Stage sondern lt. trace '[object global]' Großes Danke! ![]() Für alle Verwirrten Mitlesenden, hier noch der Code um den es ging und der trotz meiner Bedenken einwandfrei funktioniert, wenn man ??? durch null ersetzt. Code: class myLogger {
private static var _traceListeners:Vector.<Function> = new Vector.<Function>();
private static function dispatchTrace(...args:Array) :void
{
var i:int;
var len:int = _traceListeners.length;
for (i = 0; i < len; i++) {
_traceListeners[i].apply(???, args);
}
}
public static function addTraceListener(listener:Function) :void
{
if (!(listener is Function)) return;
var i:int;
var len:int = _traceListeners.length;
for (i = 0; i < len; i++) {
if (_traceListeners[i] == listener) return;
}
_traceListeners.push(listener);
}
public static function removeTraceListener(listener:Function) :void
{
if (!(listener is Function)) return;
var i:int;
var len:int = _traceListeners.length;
for (i = 0; i < len; i++) {
if (_traceListeners[i] == listener) {
_traceListeners.splice(i, 1);
return;
}
}
}
} | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| JSLint: Be careful when making functions within a loop. Consider closures | TinKim | JavaScript & jQuery | 1 | 01-07-2008 10:34 |
| Method closures Aufklärung bitte | Samuel | ActionScript 2 | 0 | 01-11-2006 16:36 |
| function mit apply und Parametern | Jekill | Flash MX | 2 | 19-04-2005 14:58 |
| function -> function load-> function onLoad XML -> function return | flobee | Flash mit XML und Webservices | 2 | 26-07-2003 12:16 |
| Function.prototype.getSingleton -> apply und trotzdem Treppen laufen? | hOk | Softwarearchitektur und Entwurfsmuster | 8 | 03-02-2003 21:48 |