javascript - 如何从 Javascript 获取所有函数和顶级名称

标签 javascript static static-analysis introspection ffi

我正在尝试编写一个程序,在 Javascript 和另一种语言 (Elm) 之间自动生成 FFI 文件。

我想知道,是否有任何工具可以采用 Javascript 模块并列出所有可用的函数,可能还有它们的参数数量?如果它只能执行顶级功能,那没关系,我意识到这会因为闭包和 thunk 等而变得复杂。

作为一种自省(introspection)的形式,是否可以在 Javascript 中做类似的事情,或者我是否必须使用某种解析器/分析器?如果有,是否存在任何此类工具并且相当成熟/易于使用?

编辑:我意识到 JavaScript 是动态的。我的主要目标是为库和 API 生成 FFI 接口(interface),所以那里的东西应该很容易静态推理,因为它们不会动态改变。如果它不完美我没关系,我正在寻找一种工具来简化我编写样板文件而不是保证是防弹的东西。

最佳答案

对您来说有些棘手的是,创建 Javascript 模块有许多不同的约定:将变量放在全局范围内,从文件返回表等。模块创建也非常动态,因此它可能是在 Javascript 中更容易做事。

假设您可以获得与您的模块对应的 javascript 对象,您可以使用 for in 循环检查它:

var myModule = ...
for(var key in myModule){
  if( Object.hasOwnProperty.call(myModule, key) ){
    var func = myModule[key];
    ...
  }
}

要检查对象属性是否为函数,可以使用typeof 运算符:

if(typeod func == "function")

要查看参数的数量,您可以检查函数的长度属性:

func.length

请注意,如果函数是可变的或以其他方式从 arguments 数组获取参数,则参数数量可能是错误的。但是检查源文本的某些东西也会出错......

关于javascript - 如何从 Javascript 获取所有函数和顶级名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926072/

相关文章:

c - 如何在编译时检测或防止未初始化的数组元素?

javascript - 如何将现有的非 React-Native-Component JS 导入/需要到 React Native 组件

javascript - 使用node.js从url解析xml文件并循环获取其中的所有url

iphone - 如何在 objective-c 中取消调度 NSTimer

c# - 处理多线程应用程序中的静态构造函数异常

iphone - XCode静态分析器: Analyzer skipped this file due to parse errors

javascript - 单个文件中多个 React 组件的 PropType 验证

javascript - ajax返回错误调用错误 ajax错误调用

c# - 将 static const char* 从 C++ 编码到 C#

recursion - Idris:尝试为 Nat 重新实现 fromInteger 时,完整性检查失败