2010-12-04 41 views
8

Cette question est intentionnellement formulée comme this question.Comment lister les fonctions/méthodes d'un objet javascript? (Est-ce encore possible?)

Je ne sais même pas si c'est possible, je me souviens vaguement d'avoir entendu parler de certaines propriétés non énumérables dans JS. Quoi qu'il en soit, pour résumer une histoire courte: je développe quelque chose sur un framework js pour lequel je n'ai pas de documentation et pas d'accès facile au code, et cela aiderait grandement à savoir ce que je peux faire avec mes objets .

Répondre

9

Je pense que c'est ce que vous cherchez:

var obj = { locaMethod: function() { alert("hello"); }, a: "b", c: 2 }; 
for(var p in obj) 
{ 
    if(typeof obj[p] === "function") { 
     // its a function if you get here 
    } 
} 
3

Vous devriez être en mesure d'énumérer les méthodes qui sont définies directement sur un objet, par exemple:

var obj = { locaMethod: function() { alert("hello"); } }; 

Mais la plupart des méthodes appartiendrez au prototype de l'objet, comme ceci:

var Obj = function ObjClass() {}; 
Obj.prototype.inheritedMethod = function() { alert("hello"); }; 
var obj = new Obj(); 

Ainsi, dans Dans ce cas, vous pouvez découvrir les méthodes héritées en énumérant les propriétés de Obj.prototype.

+0

C'est le problème que je rencontre en pratique. J'obtiendrai tout ce qui est dans mon objet, mais pas Obj.prototype, et si je me souviens bien, mets mon code ici comme réponse. Je pense que c'est de l'introspection. Y a-t-il un autre terme pour cela? –

1

Vous pouvez utiliser les éléments suivants:

var obj = { locaMethod: function() { alert("hello"); }, a: "b", c: 2 }; 


for(var p in obj) 
{ 
    console.log(p + ": " + obj[p]); //if you have installed Firebug. 
} 
15

Si vous incluez Underscore.js dans votre projet, vous pouvez utiliser _.functions(yourObject).