Restituisce tutte le funzioni definite in un file Javascript

Per il seguente script, come posso scrivere una funzione che restituisca tutte le funzioni dello script come una matrice? Mi piacerebbe restituire una serie di funzioni definite nello script in modo che possa stampare un riepilogo di ogni funzione definita nello script.

function getAllFunctions(){ //this is the function I'm trying to write //return all the functions that are defined in the script where this //function is defined. //In this case, it would return this array of functions [foo, bar, baz, //getAllFunctions], since these are the functions that are defined in this //script. } function foo(){ //method body goes here } function bar(){ //method body goes here } function baz(){ //method body goes here } 

Dichiaralo in uno pseudo namespace, ad esempio in questo modo:

  var MyNamespace = function(){ function getAllFunctions(){ var myfunctions = []; for (var l in this){ if (this.hasOwnProperty(l) && this[l] instanceof Function && !/myfunctions/i.test(l)){ myfunctions.push(this[l]); } } return myfunctions; } function foo(){ //method body goes here } function bar(){ //method body goes here } function baz(){ //method body goes here } return { getAllFunctions: getAllFunctions ,foo: foo ,bar: bar ,baz: baz }; }(); //usage var allfns = MyNamespace.getAllFunctions(); //=> allfns is now an array of functions. // You can run allfns[0]() for example 

Ecco una funzione che restituisce tutte le funzioni definite nel documento, ciò che fa è itera su tutti gli oggetti / elementi / funzioni e visualizza solo quelli il cui tipo è “funzione”.

 function getAllFunctions(){ var allfunctions=[]; for ( var i in window) { if((typeof window[i]).toString()=="function"){ allfunctions.push(window[i].name); } } } 

Ecco una demo di lavoro di jsFiddle

 function foo(){/*SAMPLE*/} function bar(){/*SAMPLE*/} function www_WHAK_com(){/*SAMPLE*/} for(var i in this) { if((typeof this[i]).toString()=="function"&&this[i].toString().indexOf("native")==-1){ document.write('
  • '+this[i].name+"
  • ") } }