使用extends在同一对象内继承类报错:A未定义,如何解决?
问题分析与解决方法
你遇到的"A is not defined"错误,原因是对象字面量在创建过程中,变量A还未完成赋值——当你定义Bar类并尝试继承A.Foo时,A还只是一个正在被构建的对象,还没有被赋值到变量里,自然无法通过A.Foo访问到Foo类。
这种继承思路是可行的,只需调整代码结构避开变量未初始化的问题,以下是两种有效解决方案:
方案一:先独立定义基类,再构建对象
先把Foo类单独定义,再加入对象中,这样Bar可以直接引用已存在的Foo类:
class Foo {} const A = { Foo, Bar: class extends Foo { constructor() { super(); // 继承类的构造函数必须调用super(),否则会报错 console.log("test"); } } }; const a = new A.Bar();
方案二:分步为对象添加属性
先创建空对象A,再依次添加Foo和Bar属性,此时A已经存在,Bar可以正常引用A.Foo:
const A = {}; A.Foo = class {}; A.Bar = class extends A.Foo { constructor() { super(); console.log("test"); } }; const a = new A.Bar();
注意:继承类的构造函数必须调用super()来初始化父类的上下文,否则运行时会抛出错误,你的原代码中缺少这一步,需要补上。
内容的提问来源于stack exchange,提问作者Michael Johnson
相关产品推荐
相关产品推荐

