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

TypeScript派生类成员未初始化:构造函数中如何正确访问?

问题分析与解决方案

这个问题的核心是TypeScript中类字段的初始化顺序导致的——你在父类构造函数里访问this.model时,子类的声明式字段还没完成初始化。

为什么会输出undefined?

TypeScript/JavaScript中派生类的执行流程是这样的:

  1. 进入子类构造函数
  2. 首先调用super()(父类构造函数)
  3. 父类构造函数执行完毕后,才会初始化子类的实例字段(也就是你写的model = 'Dodge'这一步)

所以当父类构造函数里打印this.model时,子类的model还没被赋值,自然输出undefined。

正确的实现方式

最合理的解决办法是通过构造函数参数把model传递给父类,让父类在构造函数里直接赋值并使用,这样就能保证父类构造函数执行时拿到正确的值:

abstract class Car {
  model: string;
  constructor(model: string) {
    this.model = model;
    console.log(`Car model: ${this.model}`);
  }
}

class Dodge extends Car {
  constructor() {
    // 把子类的model值传递给父类构造函数
    super('Dodge');
  }
}

const dodge = new Dodge(); // 输出: Car model: Dodge

如果你不想修改父类的构造函数参数,另一种方式是父类延迟使用model(比如在构造函数之后的方法里访问),但这种场景下显然传参的方式更符合逻辑,因为父类本身依赖model字段,应该在实例化时就确保它被初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:55