如何继承在对象字面量中声明的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
相关产品推荐
相关产品推荐

