在V8中按用户列出所有已定义的函数名称

时间:2012-08-03 10:33:25

标签: javascript v8

从3个小时开始,我搜索一个Javascript函数,该函数返回用户可访问/创建的函数列表。

不幸的是,我找不到任何东西......

您知道如何在Google V8 Javascript引擎上执行此操作吗?

PS:对不起我的英语,我是法国学生:D

3 个答案:

答案 0 :(得分:2)

没有编制当前函数或变量列表的编程方法。

您至少需要知道这些功能的存在 - 例如在特定的命名空间。

var fn = {};
fn.someFunc = function(){}
fn.someProp = 'foo';
fn.someOtherFunc = function(){}

//get all funcs
for (var i in fn) if (typeof fn[i] == 'function') alert('found a function');

答案 1 :(得分:2)

请注意,默认情况下,未声明为对象方法的函数被视为窗口对象的方法。

因此,使用类似下面的代码,您可以列出窗口对象的所有功能。 你可以检查输出并添加更好的过滤器来改进isFunction函数,我偷了here

<script type="text/javascript">

        function myTest() //function to be detected
        {
            return true;
        }

        function isFunction(functionToCheck)
        {
            var getType = {};
            return functionToCheck && getType.toString.call(functionToCheck) == '[object Function]';
        }

        for( var it in window )
        {
            if(isFunction(window[it]))
                console.log(it+":"+window[it]);
        }


    </script>

答案 2 :(得分:1)

也许我可以帮到你。从全局上下文开始,此调用在每个对象中自上而下。第一个函数返回我们的自由范围对象所在的全局对象。我们对每个对象进行递归搜索功能或任何你想要的东西。

var global = (function(){return this;})();

(function(ctx){
  for(var i in ctx) { 
   // put your function check here.
   // System.out.println(i + ' ' + typeof ctx[i]); 
   if(ctx[i] instanceof Object) { 
     arguments.callee(ctx[i]); }
  }
})(global);

run code on the fly