如何从JavaScript文件中获取方法名称

时间:2011-08-03 03:50:36

标签: javascript reflection

我有一个JavaScript文件,其中定义了许多方法。有没有办法知道该文件中有多少方法&方法的名称是什么?

4 个答案:

答案 0 :(得分:2)

  

有没有办法知道Java中有多少种方法   脚本&方法的名称是什么?

阅读来源或文档(如果有的话)。

如果您正在寻找某种“列表可用方法”功能,则没有一种功能。写一个就相当于编写一个javascript解析器,甚至可能是编译器。

祝你好运。 : - )

答案 1 :(得分:2)

虽然理论上你可以尝试找到与模式匹配的所有内容:

function <name>(

你错过了很多其他类型的功能。请参阅,函数实际上只是JavaScript中的对象。可以分配,共享,修改和移动它们。所以,你也必须找到这些:

var <name> = function() {}

这些:

function returnFunc() {
    return function() {...}
}
var <name> = returnFunc();

以及这些:

obj.member = new Function();

几乎无限多种类似的函数定义。

所以,答案是,很可能你不能。除非代码构造极其狭窄。

答案 2 :(得分:2)

简短的回答是“不”。

答案很长,如果JS文件是你的 JS文件,即你控制内容,那么有几种方法可以构建代码,让你获得计数或功能名称列表。显然,这对你的其他人的代码没有帮助。如果您已经知道所有这些,请道歉,但是如果您不知道:将所有“库”函数作为单个对象的属性包装起来通常是个好主意,如下所示:

var myFunctionLibrary = {
  doSomething         : function() {},
  somethingElse       : function() {},
  nonFunctionProperty : "test",
  // etc.
}

这将创建一个名为myFunctionLibrary的全局变量,该变量是一个对象,其属性是对函数的引用。 (注意:还有其他几种方法可以实现类似的效果,我更喜欢这种方式,但这对于这种解释来说似乎最简单。)然后,您可以通过以下方式访问这些函数:

myFunctionLibrary.doSomething();
// or
myFunctionLibrary["doSomething"]();

因为所有函数都包含在特定对象中,您可以像任何其他对象一样迭代它们:

var funcCount = 0;
var propCount = 0;
for (fn in myFunctionLibrary) {
  if (typeof myFunctionLibrary[fn] === "function"){
    funcCount++;
    alert("Function name: " + fn);
  } else {
    propCount++;
  }
}

alert("There are " + funcCount + " functions available, and "
      + propcount + " other properties.");

但主要的优点是,您不必担心您的函数可能与您要使用的其他库中的函数具有相同的名称。

答案 3 :(得分:0)

编写程序将文件加载到Rhino中,然后检查字典并查看您的文件。