我正在尝试编写一个程序,在 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/