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

如何继承在对象字面量中声明的character类?

问题原因

你这种写法失效是因为对象字面量在初始化过程中,core还没完成赋值。当你在core里定义enemy类时,core.character还没被挂载到core对象上,此时core.character是undefined,extends一个undefined自然会报错。

解决方法

这里提供几种可行的方案:

方案1:先单独定义父类,再整合到对象中

先把character类单独提出来定义,再分别放到core对象里,这样继承时能直接拿到已定义的类:

const Character = class {
  constructor(arg) {}
};

const core = {
  character: Character,
  enemy: class extends Character {
    constructor(arg) {
      super(arg); // 子类构造函数必须调用super,否则会抛出错误
    }
  }
};

方案2:先初始化core,再添加子类属性

先创建包含character的core对象,之后再给core添加enemy属性,此时core.character已经存在:

const core = {
  character: class {
    constructor(arg) {}
  }
};

core.enemy = class extends core.character {
  constructor(arg) {
    super(arg);
  }
};

方案3:使用getter延迟子类创建

通过对象的getter方法,每次访问core.enemy时才会创建子类,此时core.character已经初始化完成:

const core = {
  character: class {
    constructor(arg) {}
  },
  get enemy() {
    return class extends this.character {
      constructor(arg) {
        super(arg);
      }
    };
  }
};

注意:ES6子类的构造函数中必须调用super(),否则会抛出ReferenceError,这是类继承的强制要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:43:12