类的对象:在同一个对象内使用extends引用另一个类

前端开发 2026-07-09

https://jsfiddle.net/jenqhg3o/1/

A = {
  Foo: class {

  },
  Bar : class extends A.Foo {
    constructor (){
      console.log("test")
    }
  }
}

var a = new A.Bar()

这样扩展可行吗?我得到的是:A未定义。请帮忙。

谢谢

解决方案

由于JavaScript中缺乏时间旅行,这段代码根本做不到。你不能扩展一个当前还不存在、且正在与 extends 同时创建的类。

问题归结为试图使用当前正在被赋值的那个值:

foo = foo + 1;

这两个类的创建在执行时间上需要分开:

要么把它们分成独立的语句

const Foo = class {

}

A = {
  Foo: Foo,
  Bar : class extends Foo {
    constructor (){
      super()
      console.log("test")
    }
  }
}

var a = new A.Bar();

或者通过将 class extends A.Foo 的求值延迟,直到 A.Foo 存在为止,这可以通过getter实现(在访问 A.Bar 时代码才运行)。

A = {
  Foo: class {

  },
  get Bar(){
    return class extends A.Foo {
      constructor (){
        super()
        console.log("test")
      }
    }
  }
}

var a = new A.Bar();

然而,最好的办法是根本不要尝试这个初始化。完全没必要在对象初始化器里把所有内容都做完。把类声明分开可以让代码更易读,且更不容易出错

class Foo {

}

class Bar extends Foo {
  constructor (){
    super()
    console.log("test")
  }
}

const A = { Foo, Bar };

var a = new A.Bar();
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章