Classe de debug
Par -Alexandre LEGOUT aka LAlex- le mardi, juillet 19 2005, 12:28 - AS2 - Lien permanent
Je suppose que la plupart des codeurs ont leur classe de debug. Voici la mienne, a peine commencée. Il s'agit uniquement d'un dump d'un objet. La méthode un objet recursivement pour afficher l'ensemble de ses propriétés. Il gère également le fait qu'on ait pu mettre le nom de la classe dans une variable statique (par défaut __className).
/**
* Debug
* @version 0.1
* @package com.lalex.utils
*
* @author <a href="http://www.lalex.com/">LAlex</a>
* @since 2005-07-19
*/
class com.lalex.utils.Debug {
/**
* Property used to store class names
*/
public static var classNameProperty:String = "__className";
/**
* Trace an object detailled content
* @param o Object to display
*/
public static function dump(o) {
_global.trace(dumpToString(o));
}
/**
* Return a string containing the object content. Recursive method
* @param o Target object
* @param d Depth. Used to generate tabs
*/
private static function dumpToString(o, d:Number):String {
d = d ? d : 0;
var dp:Number = d;
var sp:String = "";
while (d-- > 0) {
sp += " ";
}
if (typeof o == "object") {
var ret:String = "[";
if ( o["__constructor__"][classNameProperty] ) {
ret += o["__constructor__"][classNameProperty];
} else if (o instanceof Array) {
ret += "Array";
} else {
ret += "Object";
}
ret += "
" + sp;
for (var p in o) {
if (typeof p != "function") {
ret += p + ": " + dumpToString(o[p], dp+1) + "
" + sp;
}
}
ret += "]";
return ret;
} else {
return o.toString();
}
}
}
Une suite à cette classe est prévue, avec pitet' même une petite surprise... ![]()
Commentaires
Je suis curieux
c'est quoi la surprise ?? 
Sinon je sais pas si cela t'intéresse de la mettre dans ta classe mais j'ai une méthode simple qui permet de parcourir la chaine des __proto__ d'une instance pour afficher l'intégralité de l'héritage d'une instance ... peut être qu'en la combinant à ta gestion du nom des classes etc.. il serait possible de faire quelquechose de pas mal ?

/* ---------- DebugObjectName : DebugObject
Package : eka.debug
Version : 1.0.0.0
Date : 2005-06-06
Author : ekameleon
URL : <a href="http://www.ekameleon.net" rel="nofollow">http://www.ekameleon.net</a>
Mail : <a href="mailto:contact@ekameleon.net" rel="nofollow">contact@ekameleon.net</a>
METHODS
getProtos
Description : parcours toute la chaine des __proto__ d'une instance
Return : une chaine de caractère.
---------- */
class eka.debug.DebugObject {
// ----o Author Properties
public static var className:String = "DebugObject" ;
public static var classPackage:String = "eka.debug";
public static var version:String = "1.0.0.0";
public static var author:String = "ekameleon";
public static var link:String = "<a href="http://www.ekameleon.net" rel="nofollow">http://www.ekameleon.net</a>" ;
// ----o Constructor
private function DebugObject () {}
// ----o Singleton
public static function getProtos (o):String {
_cpt = 0 ;
return _browseProto(o) ;
}
// ----o Static Private Properties
static private var _cpt:Number ;
// ----o Static Private Methods
static private function _browseProto(o):String {
var p = o.__proto__ ;
if (p == undefined) return ;
var txt:String = "++ level : " + _cpt++ ;
_global.ASSetPropFlags(p, null, 0, 1) ;
for (var prop:String in p) txt += "
\t" + prop + " : " + p[prop] ;
_global.ASSetPropFlags(p, null, 1, 0) ;
var next:String = _browseProto(p) ;
if (next != undefined) txt += "
" + next ;
return txt ;
}
}
EKA+
Ah oui au fait
Au passage tu as un peu consulté le package AS2 "mx" de Flash remoting ?
Dedans tu as la classe : mx.data.binding.ObjectDumper
Elle permet par exemple d'utiliser une méthode statique :
ObjectDumper.toString(obj, showFunctions, showUndefined, showXMLstructures, maxLineLength, indent)exemple d'utilisation :import mx.data.binding.* ;var o = {
prop1 : 2 ,
prop2 : true ,
prop3 : "coucou" ,
prop5 : function () {
trace ("ok") ;
} ,
prop6 : new XML('<item></item>') ,
prop7 : [2, 5, 6, "coucou"]
}
var s:String = ObjectDumper.toString(o) ;
trace (s) ;
sortie : , prop7: [2, 5, 6, "coucou"]}
{prop1: 2, prop2: true, prop3: "coucou", prop6:
EKA+
Salut
ça me rappel un peu :
http://blog.soulhead.org/archives/2005/01/07/collect_for_output_pour_classes_as2.html
Effectivement, en combinant un peu tout ça, y a moyen de faire quelque chose ...
Fil des commentaires de ce billet