Je souhaiterais pouvoir lister en JS l'état des variables déclarées.
Je suppose qu'il me faut utiliser un for...in mais je ne sais plus
comment manipuler ça :-(((
Vous avez une piste pour moi ?
Thierry
--
4 "Il y a 10 sortes de personnes sur Terre : ceux qui connaissent
3 le système et savent compter et ceux qui ne savent pas compter"
2
1....'....12.....'....24.....'....36.....'....48.....'....60.....'....72
function print_all() { for (var i in window) { ok=0; for(var j in wins) { if(i==wins[j]) ok=1; } if(ok==0) document.write("<b>"+i+"</b> = "+window[i]+"<br>n"); } document.close(); }
-- Stephane Moriaux et son [moins] vieux Mac
Thibault <thibault@none.com> wrote:
Je n'ai pas la réponse pour t'aider sur ce point :-)
function print_all() {
for (var i in window) {
ok=0;
for(var j in wins) {
if(i==wins[j])
ok=1;
}
if(ok==0)
document.write("<b>"+i+"</b> = "+window[i]+"<br>n");
}
document.close();
}
function print_all() { for (var i in window) { ok=0; for(var j in wins) { if(i==wins[j]) ok=1; } if(ok==0) document.write("<b>"+i+"</b> = "+window[i]+"<br>n"); } document.close(); }
-- Stephane Moriaux et son [moins] vieux Mac
zwetan
salut,
"Thierry Loiseau" wrote:
Je souhaiterais pouvoir lister en JS l'état des variables déclarées.
Je suppose qu'il me faut utiliser un for...in mais je ne sais plus comment manipuler ça :-(((
Vous avez une piste pour moi ?
je ne sais pas si tu as vu ma réponse sur comp.lang.javascript
mais bon je te donne un peu plus de details en francais :)
on peut lister les variables avec for...in, le probleme vient si on veut pouvoir faire cela de manière reccursive pour vraiment lister toutes les variables et les autres variables qu'elles contiennent
par ex les structures objets
toto: { a: { x: 0. y: 1 } }
un for..in qui ne prendra en compte que le 1er niveau objet fonctionnera, mais dès qu'on voudra aller aux 2nd niveaux etc. il y aura une erreure de type "out of stack"
comme l'indique ASM dans un autre post, avoir une array pour isoler des proprietes propre a l'objet Window permet d'eviter ce genre d'erreur, mais le probleme est que selon les navigateurs les proprietes a isoler sont differentes donc amha il vaut mieux le faire de manière dynamique (cf dans core2 la function au tout debut "_introspectGlobal")
reste que ton probleme est principalement que tu utilises un objet Array au lieu d'un objet Object pour definir une Array associative
bref regarde le code que je t'ai posté là bas et si tu as du mal pour l english je te traduirais cela ici
(et non je remettrais pas le lien de core2 car on va me dire que je fais de la pub.. pour un projet open source pfff ..enfin passons)
zwetan
salut,
"Thierry Loiseau" wrote:
Je souhaiterais pouvoir lister en JS l'état des variables déclarées.
Je suppose qu'il me faut utiliser un for...in mais je ne sais plus
comment manipuler ça :-(((
Vous avez une piste pour moi ?
je ne sais pas si tu as vu ma réponse sur comp.lang.javascript
mais bon je te donne un peu plus de details en francais :)
on peut lister les variables avec for...in, le probleme vient si on veut
pouvoir
faire cela de manière reccursive pour vraiment lister toutes les variables
et les autres variables qu'elles contiennent
par ex les structures objets
toto:
{
a:
{
x: 0.
y: 1
}
}
un for..in qui ne prendra en compte que le 1er niveau objet
fonctionnera, mais dès qu'on voudra aller aux 2nd niveaux etc.
il y aura une erreure de type "out of stack"
comme l'indique ASM dans un autre post, avoir une array
pour isoler des proprietes propre a l'objet Window permet
d'eviter ce genre d'erreur, mais le probleme est que
selon les navigateurs les proprietes a isoler sont differentes
donc amha il vaut mieux le faire de manière dynamique
(cf dans core2 la function au tout debut "_introspectGlobal")
reste que ton probleme est principalement que tu utilises
un objet Array au lieu d'un objet Object pour definir
une Array associative
bref regarde le code que je t'ai posté là bas
et si tu as du mal pour l english je te traduirais cela ici
(et non je remettrais pas le lien de core2 car on va me dire que je fais de
la pub..
pour un projet open source pfff ..enfin passons)
Je souhaiterais pouvoir lister en JS l'état des variables déclarées.
Je suppose qu'il me faut utiliser un for...in mais je ne sais plus comment manipuler ça :-(((
Vous avez une piste pour moi ?
je ne sais pas si tu as vu ma réponse sur comp.lang.javascript
mais bon je te donne un peu plus de details en francais :)
on peut lister les variables avec for...in, le probleme vient si on veut pouvoir faire cela de manière reccursive pour vraiment lister toutes les variables et les autres variables qu'elles contiennent
par ex les structures objets
toto: { a: { x: 0. y: 1 } }
un for..in qui ne prendra en compte que le 1er niveau objet fonctionnera, mais dès qu'on voudra aller aux 2nd niveaux etc. il y aura une erreure de type "out of stack"
comme l'indique ASM dans un autre post, avoir une array pour isoler des proprietes propre a l'objet Window permet d'eviter ce genre d'erreur, mais le probleme est que selon les navigateurs les proprietes a isoler sont differentes donc amha il vaut mieux le faire de manière dynamique (cf dans core2 la function au tout debut "_introspectGlobal")
reste que ton probleme est principalement que tu utilises un objet Array au lieu d'un objet Object pour definir une Array associative
bref regarde le code que je t'ai posté là bas et si tu as du mal pour l english je te traduirais cela ici
(et non je remettrais pas le lien de core2 car on va me dire que je fais de la pub.. pour un projet open source pfff ..enfin passons)
zwetan
zwetan
"O.L." wrote:
Tu veux pouvoir connaitre la valeur de toutes les variables créées dans ta page web ? Dur dur, AMHA ... voire impossible, non ? Sauf si tu connais un bout de leur nom (genre, var1, var2, varx).
cela s'appelle de la réflection de code ou de l'introspection de code et non non ce n'est pas impossible :)
voir dans la lib core2 http://www.burrrn.com/documentation/core2/files/buRRRn/core2/_global-es.html#_global.GetObjectPath http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html#Object.getConstructorPath http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html
exemple: ---------------------
var toto = {}; toto.a = {}; toto.a.b = {}; toto.a.b.c = {}; //... toto.a.b.c.d.e.f.g.h.i.j = {};
trace( GetObjectPath( toto.a.b.c.d.e.f.g.h.i.j ) ); //renvoie le string "toto.a.b.c.d.e.f.g.h.i.j"
var maClass = function( a, b ) { this.a = a; this.b = b; }
titi = new maClass(); trace( titi.getConstructorName() ); //renvoie le string "maClass" ---------------------
pratique pour debugguer ;)
zwetan
"O.L." wrote:
Tu veux pouvoir connaitre la valeur de toutes les variables créées dans
ta page web ?
Dur dur, AMHA ... voire impossible, non ? Sauf si tu connais un bout de
leur nom (genre, var1, var2, varx).
cela s'appelle de la réflection de code ou de l'introspection de code
et non non ce n'est pas impossible :)
voir dans la lib core2
http://www.burrrn.com/documentation/core2/files/buRRRn/core2/_global-es.html#_global.GetObjectPath
http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html#Object.getConstructorPath
http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html
exemple:
---------------------
var toto = {};
toto.a = {};
toto.a.b = {};
toto.a.b.c = {};
//...
toto.a.b.c.d.e.f.g.h.i.j = {};
trace( GetObjectPath( toto.a.b.c.d.e.f.g.h.i.j ) ); //renvoie le string
"toto.a.b.c.d.e.f.g.h.i.j"
var maClass = function( a, b )
{
this.a = a;
this.b = b;
}
Tu veux pouvoir connaitre la valeur de toutes les variables créées dans ta page web ? Dur dur, AMHA ... voire impossible, non ? Sauf si tu connais un bout de leur nom (genre, var1, var2, varx).
cela s'appelle de la réflection de code ou de l'introspection de code et non non ce n'est pas impossible :)
voir dans la lib core2 http://www.burrrn.com/documentation/core2/files/buRRRn/core2/_global-es.html#_global.GetObjectPath http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html#Object.getConstructorPath http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Object-es.html
exemple: ---------------------
var toto = {}; toto.a = {}; toto.a.b = {}; toto.a.b.c = {}; //... toto.a.b.c.d.e.f.g.h.i.j = {};
trace( GetObjectPath( toto.a.b.c.d.e.f.g.h.i.j ) ); //renvoie le string "toto.a.b.c.d.e.f.g.h.i.j"
var maClass = function( a, b ) { this.a = a; this.b = b; }
titi = new maClass(); trace( titi.getConstructorName() ); //renvoie le string "maClass" ---------------------
pratique pour debugguer ;)
zwetan
ASM
titi = new maClass(); trace( titi.getConstructorName() ); //renvoie le string "maClass" ---------------------
pratique pour debugguer ;)
débugguer quoi ?
je ne comprends rien à tes exemples je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé) en filant l'interrogation sur un nom de variable dont on voudrait justement éviter d'avoir à le faire (donner le nom de la variable ou de l'objet)
non ... je ne comprends pas
-- Stephane Moriaux et son [moins] vieux Mac
titi = new maClass();
trace( titi.getConstructorName() ); //renvoie le string "maClass"
---------------------
pratique pour debugguer ;)
débugguer quoi ?
je ne comprends rien à tes exemples
je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé)
en filant l'interrogation sur un nom de variable
dont on voudrait justement éviter d'avoir à le faire
(donner le nom de la variable ou de l'objet)
titi = new maClass(); trace( titi.getConstructorName() ); //renvoie le string "maClass" ---------------------
pratique pour debugguer ;)
débugguer quoi ?
je ne comprends rien à tes exemples je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé) en filant l'interrogation sur un nom de variable dont on voudrait justement éviter d'avoir à le faire (donner le nom de la variable ou de l'objet)
non ... je ne comprends pas
-- Stephane Moriaux et son [moins] vieux Mac
loiseauthierry
zwetan wrote:
pratique pour debugguer ;)
Si c'est pour debugguer, alors oui, c'est pratique !!!! Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça... à moi et aux autres je penses !!
Si c'est pour debugguer, alors oui, c'est pratique !!!!
Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça...
à moi et aux autres je penses !!
Si c'est pour debugguer, alors oui, c'est pratique !!!! Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça... à moi et aux autres je penses !!
je ne comprends rien à tes exemples je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé) en filant l'interrogation sur un nom de variable dont on voudrait justement éviter d'avoir à le faire (donner le nom de la variable ou de l'objet)
non ... je ne comprends pas
ok exemple de scenario
tu es dans un navigateurs, tu charges differents scripts et à un moment T tu veux obtenir une image des variables qui ont été déclarées en global
si tu connais Flash, c'est un equivalent au CTRL+ALT+V pendant que l'on test dans l'IDE
autre exemple de scenario
tu veux recuperer toutes les membres qui ont ete déclarés dans le prototype d'un constructeur
----------------- var maClass = fuction() { //... }
maClass.prototype.method1 = function() { //.. }
//etc.
toto = new maClass();
toto.getMembers = function() { var ctor = this.getConstructorName(); var ctorObj = eval( ctor );
var members = []; for( var member in ctorObj.prototype ) { members.push( member ); }
return members; //Array }
-----------------
ce sont pas des scenarios qui arrivent tous les jours, mais dans certains cas ca peut etre tres utile
zwetan
"ASM" wrote:
débugguer quoi ?
je ne comprends rien à tes exemples
je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé)
en filant l'interrogation sur un nom de variable
dont on voudrait justement éviter d'avoir à le faire
(donner le nom de la variable ou de l'objet)
non ... je ne comprends pas
ok exemple de scenario
tu es dans un navigateurs, tu charges differents scripts
et à un moment T tu veux obtenir une image des variables
qui ont été déclarées en global
je ne comprends rien à tes exemples je croyais qu'on parlait de bêtes variables ? (globales)
de renvoyer le nom du constructeur (qui n'est pas utilisé) en filant l'interrogation sur un nom de variable dont on voudrait justement éviter d'avoir à le faire (donner le nom de la variable ou de l'objet)
non ... je ne comprends pas
ok exemple de scenario
tu es dans un navigateurs, tu charges differents scripts et à un moment T tu veux obtenir une image des variables qui ont été déclarées en global
si tu connais Flash, c'est un equivalent au CTRL+ALT+V pendant que l'on test dans l'IDE
autre exemple de scenario
tu veux recuperer toutes les membres qui ont ete déclarés dans le prototype d'un constructeur
----------------- var maClass = fuction() { //... }
maClass.prototype.method1 = function() { //.. }
//etc.
toto = new maClass();
toto.getMembers = function() { var ctor = this.getConstructorName(); var ctorObj = eval( ctor );
var members = []; for( var member in ctorObj.prototype ) { members.push( member ); }
return members; //Array }
-----------------
ce sont pas des scenarios qui arrivent tous les jours, mais dans certains cas ca peut etre tres utile
zwetan
zwetan
Si c'est pour debugguer, alors oui, c'est pratique !!!!
:)
Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça... à moi et aux autres je penses !!
si des gens ont des problems d utilisation je peux aider (oui je supporte mes libs open source) par contre je prefererais que ce support is il y a besoin se passe plutot sur le newsgroup dédié a cela (voir la page projet) ce qui permettrait de mettre tout au meme endroit plutot que de rediriger les gens a a gauche et a droite
je prepare aussi des tutoriaux, si des cas particulier sont plus interessant que d'autres aux yeux des gens j'essayerai de les faire aller dans ce sens
zwetan
Si c'est pour debugguer, alors oui, c'est pratique !!!!
:)
Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça...
à moi et aux autres je penses !!
si des gens ont des problems d utilisation je peux aider
(oui je supporte mes libs open source)
par contre je prefererais que ce support is il y a besoin
se passe plutot sur le newsgroup dédié a cela (voir la page projet)
ce qui permettrait de mettre tout au meme endroit
plutot que de rediriger les gens a a gauche et a droite
je prepare aussi des tutoriaux, si des cas particulier
sont plus interessant que d'autres aux yeux des gens
j'essayerai de les faire aller dans ce sens
Si c'est pour debugguer, alors oui, c'est pratique !!!!
:)
Merci à toi pour ton aide, il me reste alors à comprendre utiliser ça... à moi et aux autres je penses !!
si des gens ont des problems d utilisation je peux aider (oui je supporte mes libs open source) par contre je prefererais que ce support is il y a besoin se passe plutot sur le newsgroup dédié a cela (voir la page projet) ce qui permettrait de mettre tout au meme endroit plutot que de rediriger les gens a a gauche et a droite
je prepare aussi des tutoriaux, si des cas particulier sont plus interessant que d'autres aux yeux des gens j'essayerai de les faire aller dans ce sens
zwetan
ASM
je prepare aussi des tutoriaux, si des cas particulier sont plus interessant que d'autres aux yeux des gens j'essayerai de les faire aller dans ce sens
zwetan
Le problème est qu'il va falloir commencer par le B A BA ie : les prototypes et constructeurs je n'ai jamais employé dès la 2ième ligne je suis perdu .... s'il faut tout remonter depuis la fin pour essayer, à la relecture, comprendre ce qu'on a voulu faire ... je préfère encore une suite de fonctions basiques et explicites (bien francisées) .
-- Stephane Moriaux et son [moins] vieux Mac
je prepare aussi des tutoriaux, si des cas particulier
sont plus interessant que d'autres aux yeux des gens
j'essayerai de les faire aller dans ce sens
zwetan
Le problème est qu'il va falloir commencer par le B A BA
ie : les prototypes et constructeurs je n'ai jamais employé
dès la 2ième ligne je suis perdu ....
s'il faut tout remonter depuis la fin pour essayer,
à la relecture, comprendre ce qu'on a voulu faire ...
je préfère encore une suite de fonctions basiques
et explicites (bien francisées) .
je prepare aussi des tutoriaux, si des cas particulier sont plus interessant que d'autres aux yeux des gens j'essayerai de les faire aller dans ce sens
zwetan
Le problème est qu'il va falloir commencer par le B A BA ie : les prototypes et constructeurs je n'ai jamais employé dès la 2ième ligne je suis perdu .... s'il faut tout remonter depuis la fin pour essayer, à la relecture, comprendre ce qu'on a voulu faire ... je préfère encore une suite de fonctions basiques et explicites (bien francisées) .
-- Stephane Moriaux et son [moins] vieux Mac
ASM
ce sont pas des scenarios qui arrivent tous les jours, mais dans certains cas ca peut etre tres utile
Dès que je vois écrit 'prototype' dans du JS je lâche la rampe
ainsi dans le tuto clone array : http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Array-es.html#Array.clone
çà me semble extrémement compliqué juste pour faire :
toto = [1,{a:0,b:1},[2,3],"hello",true]; titi = toto;
qui, à mon idée, suffit amplement puisque :
alert(titi); ou alert(titi[1].b); vérifient bien que le clonage a été effectué.
-- Stephane Moriaux et son [moins] vieux Mac
ce sont pas des scenarios qui arrivent tous les jours,
mais dans certains cas ca peut etre tres utile
Dès que je vois écrit 'prototype' dans du JS je lâche la rampe
ainsi dans le tuto clone array :
http://www.burrrn.com/documentation/core2/files/buRRRn/core2/Array-es.html#Array.clone
çà me semble extrémement compliqué juste pour faire :
toto = [1,{a:0,b:1},[2,3],"hello",true];
titi = toto;
qui, à mon idée, suffit amplement puisque :
alert(titi);
ou
alert(titi[1].b);
vérifient bien que le clonage a été effectué.