Bessere trace Ausgabe von Objekten durch Überschreiben der toString() Methode

05.08.2006, 12:48

Beim Tracen eines Objects in Flash erscheint lediglich die Ausgabe [object Object], was recht bescheiden ist. Man kann die Ausgabe verbessern, in dem man die toString() Methode der Object Klasse in Flash überschreibt. Erzeugen wir mal ein Object in Flash und fügen ein paar Eigenschaften hinzu:

Actionscript:
adresse = new Object();
adresse.vorname ="Hans";
adresse.name ="Mustermann";
adresse.strasse ="Musterstr.";
adresse.hausnummer ="12";
adresse.plz ="12345";
adresse.ort ="Musterstadt";

trace(adresse);

Die trace-Anweisung erzeugt, wie gesagt, diese Ausgabe: [object Object]

Jetzt überschreiben wir die toString Methode, die die Object Klasse benutzt um die Trace-Ausgabe zu erzeugen:

Actionscript:
adresse = new Object();
adresse.vorname ="Hans";
adresse.name ="Mustermann";
adresse.strasse ="Musterstr.";
adresse.hausnummer ="12";
adresse.plz ="12345";
adresse.ort ="Musterstadt";

adresse.toString = function(){
        for(var prop in this){
                trace(prop + ":" + this[prop]);
        }
}

trace(adresse);

Der trace-Befehl erzeugt nun folgende Ausgabe:


toString:[type Function]
ort:Musterstadt
plz:12345
hausnummer:12
strasse:Musterstr.
name:Mustermann
vorname:Hans
[type Object]

Aber wir können die Ausgabe sogar noch sinnvoll formatieren:

Actionscript:
adresse = new Object();
adresse.vorname ="Hans";
adresse.name ="Mustermann";
adresse.strasse ="Musterstr.";
adresse.hausnummer ="12";
adresse.plz ="12345";
adresse.ort ="Musterstadt";

adresse.toString = function(){
        trace(this.name +", " + this.vorname);
        trace(this.strasse +" "+ this.hausnummer);
        trace(this.plz +" "+ this.ort);
}

trace(adresse);

Jetzt wird unser Object so ausgegeben:


Mustermann, Hans
Musterstr. 12
12345 Musterstadt
[type Object]

Wir haben damit lediglich die toString() Function des Objects adresse geändert. Wenn wir ein anderes Object erzeugen, erhält dieses Object wieder die ursprüngliche toString()-Funktion der Object Klasse.

Technorati: , , , ,


Ein Kommentar zu “Bessere trace Ausgabe von Objekten durch Überschreiben der toString() Methode”

Elmi

06.12.2006, 09:23

Hey .. wir wär’s mit ein bissl Rekursion ..

ala ..

if( typeof( this[prop] == ‘object’ ) )
return this[prop].toString();

und dann auch schön Einrücken nach Rekursionslevel .. :)

greetz

Elmar

Hier kommentieren: