2010-12-04 14 views
8

Esta pregunta está expresada intencionalmente como this question.¿Cómo se enumeran las funciones/métodos de un objeto javascript? (¿Es posible?)

Ni siquiera sé si esto es posible, recuerdo haber escuchado vagamente algo sobre algunas propiedades no enumerables en JS.

De todos modos, para resumir: estoy desarrollando algo en un framework js para el cual no tengo documentación y no tengo acceso fácil al código, y sería de gran ayuda saber qué puedo hacer con mis objetos .

Respuesta

9

creo que esto es lo que busca:

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

Usted debe ser capaz de enumerar los métodos que se fijan directamente sobre un objeto, por ejemplo:

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

Pero la mayoría de los métodos pertenecerá al prototipo del objeto, así:

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

Así que en ese caso, podría descubrir los métodos heredados al enumerar las propiedades de Obj.prototype.

+0

Este es el problema que me estoy encontrando en la práctica. Obtendré todo lo que está en mi objeto, pero no Obj.prototype, y luego si recuerdo, pongo mi código aquí como una respuesta. Creo que esto es introspección. ¿Hay otro término para esto? –

1

Usted puede usar la siguiente:

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 incluye Underscore.js en su proyecto, puede utilizar _.functions(yourObject).

Cuestiones relacionadas