Algorithmes fonctionnels en javascript sous la forme de cours et d'exercices. Utilisation de js dans un contexte de liste, de map, list_it. Inspiré de caml. A lire à l'envers...

Affichage des articles dont le libellé est Inspection d'un objet javascript. Afficher tous les articles
Affichage des articles dont le libellé est Inspection d'un objet javascript. Afficher tous les articles

samedi 2 novembre 2013

Introspection en javascript

Comment examiner un objet en javascript: 

On peut appeler cela de l'introspection, c'est à dire l'étude de soi … ou plus simplement de l'inspection.

 1/ Quel est  type parmi les 6 types possibles en javascript:  typeof :

typeof  "hello"   ; //string
typeof  (new Date())  ; // objet
typeof jenexistepas  ; //undefined
typeof 5.5   ; // number
typeof (1===1) ; //boolean
typeof alert ; // function

2/ Si c'est un objet quel est  sa classe ?  Instanceof

Exemple : 
var maintenant = new Date() ; 
maintenant instance of Date  ;  // true
maintenant instance of Object ; // true  
alert instance of Object  ;  // true
alert instance of Function  ;  // true
alert instance of function  ;   // Erreur … 
Mais il n'existe pas la fonction getInstanceof … 


3/ Utilisation de la syntaxe for var i in objet :

Parfois il est nécessaire de connaître et énumérer les éléments qui constitue un objet en javascript : 
La syntaxe for(var element in objet ) permet d'explorer l'objet  et d'en énumérer les propriétés:

var o = {"Hello" : "moi", "DitHello": function(){ alert("hello")}


for(var i in o){
     console.log(i, o[i])
}

//hello moi
//SayHello function () {alert("hello");}



Mais cette forme est insuffisante, on ne peut pas aller plus loin avec par exemple  :
for(var i in String.prototype ){
    console.log(i , String.prototype[i] );
}
Cela ne marche pas!
Il faut donc une méthode plus complète d'inspection …

4/ Méthodes getOwnPropertyNames, getPrototypeOf et hasOwnProperty

Ces trois méthodes permettent de mieux explorer l'objet: les deux premières sont des méthodes de la classe "Object" la dernière est applicable à tout élément:
La methode Object.getOwnPropertyNames( deUnObjet ) permet d'énumérer complètement toutes les propriété d'un objet javascript.

Exemple: 
//exploration d'un tableau o:
clear();
var o= [0,1,2];
var path= "this";

while (o) {
  Object.getOwnPropertyNames(o).forEach(function (key) {
    console.log(path+ "."+ key);
  });
  path+= ".__proto__";
  o= o.__proto__;
}
Voir discussion sur le thème des propriétés d'un objet en javascript sur google groups.