You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析JavaScript类并提取所有方法,支持ES9箭头函数等语法?

问题根因

你当前使用的解析器失败是因为类内直接赋值的箭头函数方法属于类实例字段特性,该特性在ES2022才正式纳入标准:

  • esprima已经多年停止维护,最高仅支持到ES2017语法,天然不支持后续新特性
  • 你使用的默认配置的acorn没有开启对应新特性的解析插件,所以无法识别类字段语法

可行解决方案

Node.js侧方案

推荐优先使用@babel/parser,它对所有ES新特性、TS、JSX等语法的支持度是目前所有JS解析器中最全的,无需手动配置插件即可识别你提到的ES9+所有语法:

import { parse } from "@babel/parser";

const snippets = [
    "class Foo {}", // 0
    "class Foo { constructor() {} }", // 1
    "class Foo { constructor() {}; bar() {} }", // 2
    "class Foo { constructor() {}; bar() {}; baz = () => {}; }", // 3
    "let baz = () => {}", // 4
]

console.log("--------@babel/parser--------");
for(let [i,snippet] of Object.entries(snippets)) {
    try {
        parse(snippet, {
            sourceType: "script",
            // 按需开启额外特性支持,比如jsx、typescript等
            plugins: []
        });
        console.log(`snippet ${i}: ok`);
    } catch(e) {
        console.log(`snippet ${i}: failed`);
    }
}

上述代码运行后所有snippet都会返回ok,拿到AST后,遍历类声明节点的body.body数组即可提取所有方法:

  • 节点类型为ClassMethod,kind: "constructor"是构造函数
  • 节点类型为ClassMethod,kind: "method"是普通原型方法
  • 节点类型为ClassProperty,value.type: "ArrowFunctionExpression"是类箭头函数方法

如果你坚持用acorn,安装acorn-class-fields插件开启类字段解析支持即可,无需更换解析器。

Python侧方案

Python生态的JS解析器普遍更新滞后,没有能原生支持ES2022特性的纯Python实现,推荐两种跨环境方案:

  1. 用Node.js写个简易的解析脚本,将解析得到的方法列表输出为JSON,Python侧调用脚本读取输出结果,实现成本最低,稳定性最高
  2. 使用PyMiniRacer/execjs等Python库,直接在Python runtime中运行编译好的@babel/parser代码,拿到AST后做后续解析,无需单独启动Node服务

内容的提问来源于stack exchange,提问作者BPL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:54:05