Return all of the functions that are defined in a Javascript file

前端 未结 4 1872
孤独总比滥情好
孤独总比滥情好 2020-11-27 19:53

For the following script, how can I write a function that returns all of the script\'s functions as an array? I\'d like to return an array of the functions defined in the sc

相关标签:
4条回答
  • 2020-11-27 20:07

    Declare it in a pseudo namespace, for example like this:

       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
    
    0 讨论(0)
  • 2020-11-27 20:13

    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('<li>'+this[i].name+"</li>")
    	}
    }

    0 讨论(0)
  • 2020-11-27 20:17

    Here is a function that will return all functions defined in the document, what it does is it iterates through all objects/elements/functions and displays only those whose type is "function".

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

    ​ Here is a jsFiddle working demo ​

    0 讨论(0)
  • 2020-11-27 20:29

    More than 1 hour wasted on this.

    This is read .js file from node.js

    1.Install a node module:

    npm i esprima
    

    2.Assume you have a function func1 declared like below, in a file a.js in current directory:

    var func1 = function (str1, str2) {
        //
    };
    

    3.And you would like to get name of it, that is func1, the code is below:

    const fs = require("fs");
    const esprima = require("esprima");
    
    let file = fs.readFileSync("./a.js", "utf8");
    
    let tree = esprima.parseScript(file);
    tree.body.forEach((el) => {
        if (el.type == "VariableDeclaration") {
            // console.log(el);
            console.log(el.declarations);
            console.log(el.declarations[0].id);
            console.log(el.declarations[0].id.name);
        }
    });
    

    4.You can also get other details like parameters str1, str2, etc, uncomment the console.log(el) line to see other details.

    5.You can put both above code parts in one file, to get the details of current file (a.js).

    0 讨论(0)
提交回复
热议问题