2009-01-29 19 views
28

¿Es posible obtener una lista de las funciones definidas por el usuario en JavaScript?Lista de funciones globales definidas por el usuario en JavaScript?

Actualmente estoy usando esto, pero devuelve funciones que no son definidos por el usuario:

var functionNames = []; 

for (var f in window) { 
    if (window.hasOwnProperty(f) && typeof window[f] === 'function') { 
     functionNames.push(f); 
    } 
} 
+0

En Firefox, esto dio el r esperado esults, es decir, todas las funciones en el objeto global, ventana. ¿A qué falsos positivos te refieres? – Zach

+0

También me pregunto de qué falsos positivos está hablando. También noté que no has declarado f, por lo que terminará en el ámbito global si fuera parte de una función. – some

Respuesta

19

estoy asumiendo que usted quiere filtrar las funciones nativas. En Firefox, Function.toString() devuelve el cuerpo de la función, que para las funciones nativas, estará en la forma:

function addEventListener() { 
    [native code] 
} 

Usted podría coincidir con el patrón de /\[native code\]/ en su bucle y omitir las funciones que responden.

+0

Sí, eso es lo que estoy buscando. gracias – Annan

-3

Uso de Internet Explorer:

var objs = []; 
var thing = { 
    makeGreeting: function(text) { 
    return 'Hello ' + text + '!'; 
    } 
} 

for (var obj in window){window.hasOwnProperty(obj) && typeof window[obj] === 'function')objs.push(obj)}; 

no se presenta 'cosa'.

+0

¿Funcionará esto en otros navegadores web? –

+0

'thing' es un objeto global. 'thing.makeGreeting' es una función pero no global. Ninguna de estas cosas debe ser atrapada. – Annan

8

Como Chetan Sastry sugirió en su respuesta, se puede comprobar la existencia de [native code] dentro de la función stringified:

Object.keys(window).filter(function(x) 
{ 
    if (!(window[x] instanceof Function)) return false; 
    return !/\[native code\]/.test(window[x].toString()) ? true : false; 
}); 

O simplemente:

Object.keys(window).filter(function(x) 
{ 
    return window[x] instanceof Function && !/\[native code\]/.test(window[x].toString()); 
}); 

en cromo se puede obtener toda la no variables nativas y funciones por:

Object.keys(window); 
Cuestiones relacionadas