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

在App中实现继承时遇TypeError: Super expression错误求助

解决 "TypeError: Super expression must be null or a function, not undefined" 错误

这个错误的核心原因很明确:当你定义MyClass继承ExtendedClass时,ExtendedClass的值是undefined——而JavaScript要求extends关键字后面必须是一个有效的构造函数(或者null),不能是undefined。

我们一步步排查可能的问题:

1. 先检查模块导入路径是否正确

你的第二个文件里写了import {ExtendedClass} from './BaseFile',首先要确认这个路径和BaseFile.js的实际位置完全匹配:

  • 如果BaseFile.js和当前文件在同一目录,路径没问题;如果在子目录,要写成./subdir/BaseFile;
  • 有些严格的ES模块运行环境可能需要加上.js后缀,试试改成:
    import {ExtendedClass} from './BaseFile.js';
    

2. 确认Node.js环境的ES模块配置(如果适用)

如果是在Node.js中运行这段代码,默认情况下Node会把.js文件当作CommonJS模块处理,而你用了ES模块的import/export语法,这会导致模块解析异常,进而出现导入的类为undefined的情况。

解决方法是在项目的package.json中添加一行:

"type": "module"

这样Node就会把所有.js文件当作ES模块处理,import/export就能正常工作了。

3. 排查是否存在循环引用

如果BaseFile.js中也导入了MyClass所在的文件,就会形成循环引用。在循环引用场景下,模块初始化时会出现“先导入的部分还未完成定义”的情况,导致ExtendedClass在MyClass中被导入时是undefined。

你可以检查BaseFile.js的代码,看看有没有导入当前文件的语句。如果有,重构代码:把共享的逻辑移到单独的文件,或者调整导入的时机来打破循环。

4. 验证类的定义顺序(你的代码这里是对的,但还是提一下)

ES6类没有声明提升特性,所以必须先定义父类,再定义子类。你的BaseFile.js中先定义BaseClass,再定义继承它的ExtendedClass,这个顺序是正确的,不会导致问题。


顺便说一句:如果上述问题都排查过,你的代码逻辑本身是没问题的——当模块正确解析后,MyClass继承ExtendedClass、调用super('default')的写法完全符合ES6类的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:31