2

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

不幸的是,我什么也没找到......

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

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

4

3 回答 3

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');
于 2012-08-03T10:37:43.047 回答
2

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

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

<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>
于 2012-08-03T10:50:07.150 回答
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);

即时运行代码

于 2012-08-22T21:12:29.383 回答