OVH Cloud OVH Cloud

for...in

24 réponses
Avatar
loiseauthierry
Salut,

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

10 réponses

1 2 3
Avatar
loiseauthierry
Thierry Loiseau wrote:

Imagine une variable déclarée (sans 'var') :

parcours="z";


oups ! le contraire que tu m'indiquais !! (pas testé)

Désolé

Thierry

Avatar
ASM
Thibault wrote:

Je n'ai pas la réponse pour t'aider sur ce point :-)



Mince, tant pis :'(


pit-être qquechose du genre :

wins = new Array('print_all','wins','window','document','getInterface',
'parent','top','scrollbars','name','scrollX','scrollY','scrollTo',
'scrollBy','getSelection','scrollByLines','scrollByPages',
'sizeToContent','prompt','dump','setTimeout','setInterval',
'clearTimeout','clearInterval','setResizable','captureEvents',
'releaseEvents','routeEvent','enableExternalCapture','frame',
'disableExternalCapture','open','openDialog','frames','find','self',
'screen','history','content','menubar','toolbar','locationbar',
'personalbar','statusbar','directories','closed','crypto','pkcs11',
'controllers','opener','status','innerWidth','defaultStatus',
'innerHeight','outerWidth','outerHeight','screenX','screenY',
'pageXOffset','pageYOffset','scrollMaxX','scrollMaxY','length',
'fullScreen','alert','confirm','focus','blur','back','forward',
'home','stop','print','moveTo','moveBy','resizeTo','resizeBy',
'scroll','close','updateCommands','atob','btoa','frameElement',
'removeEventListener','dispatchEvent','getComputedStyle',
'event','length','location','name','navigator','offscreenBuffering');

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


Avatar
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

Avatar
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;
}

maClass.prototype.blah = function()
{
return "blah";
}

titi = new maClass();
trace( titi.getConstructorName() ); //renvoie le string "maClass"
---------------------

pratique pour debugguer ;)

zwetan

Avatar
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

Avatar
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 !!

Thierry
--
* * _*__ *
* * * -----oOOo---°O°---oOOo------- * *
http://astrophoto.free.fr/calculs/*
* * -------- oOOo oOOo ---------- *

Avatar
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

-------------
trace( ToSource( 0 ) );
-------------

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

Avatar
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

Avatar
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

Avatar
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

1 2 3