在js文件中定义的枚举javascript函数/对象

时间:2012-10-04 07:45:37

标签: javascript

  

可能重复:
  List of global user defined functions in JavaScript?

我有一个java脚本文件(.js),其中包含一些函数:

function func1(arg)
{
}

function func2(arg)
{
}

...

我想枚举js文件中定义的所有函数。 在javascript中是否有一个根对象来枚举所有子对象? (通过this post中定义的方法)

难看的解决方案:

一种方法是定义一个数组,如: var functions = [func1,func2,...];

另一种方法是字符串处理(例如正则表达式):

/功能。+(。+)/

我有更好的解决方案吗? 感谢。

4 个答案:

答案 0 :(得分:4)

您可以尝试以下内容:

var Stub = new Object();

Stub.func1 = function(args) {/*Your code*/};
Stub.func2 = function(args) {/*Your code*/};
Stub.func3 = function(args) {/*Your code*/};

// enumerate through functions

for(f in Stub)
{
   if (Stub.hasOwnProperty(f) && typeof Stub[f] === "function")
       console.log(f);
}

我在这里将对象'Stub'视为命名空间/类。

编辑:如果您无法控制JS文件(第三方),您仍然可以使用上述技术来确定文件中的函数列表。我假设js文件是在全局命名空间(窗口)上定义新函数。这是你做的:

步骤1:运行上面的脚本并将所有功能存储在窗口中(用窗口替换Stub)。

步骤2:动态加载新的JS文件(by adding a script tag linking to the external js file into the HEAD via JavaScript)并在加载JS文件后(即处于就绪状态),再次运行上述脚本。

步骤3:步骤2中报告的步骤1中尚未访问的任何功能是JS文件引入的新子集。

  • 所以你有它。

答案 1 :(得分:1)

您可以使用window迭代所有全局函数。但它包含许多其他属性。

for(var fun in window){

   // your code
}

答案 2 :(得分:1)

这是一种非常糟糕的方法;它枚举window全局对象并筛选出列为[native code]的对象。

for (var i in window) {
    if (window.hasOwnProperty(i) &&
          'function' === typeof window[i] && 
          !Function.toString.call(window[i]).match('\[native code\]')) { 
        console.log(i) 
    } 
}

可能不是非常跨浏览器,但它适用于Chrome。如果您可以将所有函数放在命名空间中,那会更好。

答案 3 :(得分:1)

JavaScript有一个根对象,只需打开控制台并输入thiswindow即可。如果要列出全局对象中的所有函数,只需像处理任何对象一样处理全局对象:

for (var property in this)
{
    if (this.hasOwnProperty(property) && typeof this[property] === 'function')
    {
        console.log(property + ' is a function');
    }
}

可以省略.hasOwnProperty检查,但请记住,所有对象(包括window)都可以追溯到Object.prototype,所以你可能会结束也列举了原型方法。更重要的是,全局对象也有自己的原型:Window.prototype。一句警告:当谈到X浏览器问题时,全局对象是最糟糕的对象之一。 IE,Mozilla,Chrome,Opera Safari之间都存在差异,有些甚至更多。