[JavaScript] Récupérer les attributs d'une classe ?

Récupérer les attributs d'une classe ? [JavaScript] - HTML/CSS - Programmation

Marsh Posté le 09-05-2006 à 15:01:06    

Bonjour,
Voila je voulais savoir si il était possible de récupérer les attributs d'une classe en javascript par une méthode ou une fonction, en fait je travaill sur le frameWork DOJO et j'aimerais pouvoir récupérer les attributs des widgets qui forment ce framework.
Meric  :)

Reply

Marsh Posté le 09-05-2006 à 15:01:06   

Reply

Marsh Posté le 09-05-2006 à 16:58:36    

Mince apparemen ça n'existe pas ? :s

Reply

Marsh Posté le 09-05-2006 à 17:25:14    

bin surtout des questions aussi spécifiques sur DOJO devraient être posées sur le forum [:mlc]

Reply

Marsh Posté le 09-05-2006 à 17:39:27    

ce n'est pas que pour DOJO je pensais a une quelque chose qui marcherait pour n'importe quel classe écrite en JS...

Reply

Marsh Posté le 09-05-2006 à 18:00:11    

Bin l'objet en js ça suxxe à mort :o ( et non je m'emporte pas, qu'on me montre un heritage propre en js ...).
Par contre tout les objets se comportent "en gros" comme des tableaux.
Du coup tu peux faire un  

Code :
  1. for( i in tonObj)


ça marchera mais ça t'affiche aussi le nom des méthodes!!!
 
Exemple:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <script type="text/javascript">
  8.   function Obj(truc){
  9.       this.attr1 = truc;
  10.       this.attr2 = 'pouet';
  11.       this.attr3 = 'niout';
  12.   }
  13.   Obj.prototype.describe = function(){
  14.       alert(this.attr1)
  15.   }
  16.   function DescObj(){
  17.     var test = new Obj();
  18.     for(var i in test){
  19.       alert(i);
  20.     }
  21.   }
  22.   </script>
  23. </head>
  24. <body>
  25.   <input type="button" onclick="DescObj()" value="test"/>
  26. </body>
  27. </html>


Message édité par anapajari le 09-05-2006 à 18:00:37
Reply

Marsh Posté le 09-05-2006 à 18:03:18    

ah et j'oubliais si jamais il te prennait l'excellente idée de faire un typeof(i) pour savoir si c'est une méthode ou un attribut tu constaterais rapidement que ça marcherait pas... Le typeof te retourne string dans le cas d'une méthode!

Reply

Marsh Posté le 09-05-2006 à 18:22:00    

OK merci j'ai fait ça :
 

Code :
  1. //propriétés de l'objet graphique      
  2.    var fpWidgetProps = {};
  3.    //instanciation de l'objet par son "consctructeur"
  4.    var widgetIns = dojo.widget.createWidget('FloatingPane', fpWidgetProps);
  5.        
  6.           for(var i in widgetIns)
  7.           {
  8.     document.getElementById('ecrire').innerHTML = document.getElementById('ecrire').innerHTML+ i +"<br>";
  9.       }


 
Par contre tout ce que je récupère est de type String...
 

Reply

Marsh Posté le 10-05-2006 à 13:36:21    

J'ai beau essayer je n'arrive pas a repérer si c'est une fonction ou attribut...
J'essaye ac eval des choses du genre : eval(widgetIns+'.i') mais je galère.

Reply

Marsh Posté le 10-05-2006 à 13:46:27    

je sais pas comment est fait l'oo dans DOJO mais si ils utilisent prototype ( comme dans l'exemple que je t'ai donné plus haut) tu peux récuperer toutes les méthodes publiques via taClasse.prototype:

Code :
  1. for(var in in taClasse.prototype){
  2. }


Biensur c'est pas parfait vu qu'il reste les méthodes privées mais c'est déjà ça!

Reply

Marsh Posté le 10-05-2006 à 13:49:07    

Quoi qu'en fait après reflexion tu dois même pouvoir t'en sortir avec un eval :)
Un truc du genre:

Code :
  1. var test = new Obj();
  2. for(var i in test){
  3.   alert(i+"--"+typeof(eval('test.'+i)));
  4. }

Reply

Marsh Posté le 10-05-2006 à 13:49:07   

Reply

Marsh Posté le 10-05-2006 à 13:53:13    

en fait j'ai testé ça :
 

Code :
  1. if(typeof(widgetIns[i])!= 'function')
  2. document.getElementById('ecrire').innerHTML = document.getElementById('ecrire').innerHTML+ i +":"+ typeof (widgetIns[i])+" <br>\n";


 
 
Et ça marche bien, merci à tous :)


Message édité par ham_mer le 10-05-2006 à 13:53:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed