添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在TypeScript中,从子类调用基类的构造函数是通过 super 关键字实现的。当你在子类中定义一个构造函数时,你必须首先调用 super() ,这会执行基类的构造函数。在调用 super() 之后,你可以在子类构造函数中执行其他初始化操作。

这是面向对象编程中的一个常见模式,用于确保继承的类正确地初始化了其基类部分。

假设我们有一个基类 Person ,它有一个构造函数,该构造函数接受 name 作为参数:

class Person {
    name: string;
    constructor(name: string) {
        this.name = name;

现在,我们创建一个Employee类,它继承自Person。我们希望Employee类接受一个额外的参数employeeID,但同时也需要从Person类继承name属性。这就是我们如何做到的:

class Employee extends Person {
    employeeID: number;
    constructor(name: string, employeeID: number) {
        super(name); // 调用基类(Person)的构造函数
        this.employeeID = employeeID;

在这个例子中,Employee类的构造函数首先通过super(name)调用了Person类的构造函数,传递了name参数。这确保了Employee实例的name属性被正确初始化。之后,Employee类的构造函数继续设置employeeID属性。

  • 当你在子类中定义构造函数时,调用super()是必需的,即使基类没有定义构造函数。如果基类没有显式定义构造函数,它会有一个默认的空构造函数,你仍然需要在子类构造函数中调用super()
  • super()调用必须是子类构造函数中的第一条语句。这是因为在基类的构造函数执行完成之前,子类的实例尚未被初始化,所以你不能在调用super()之前访问this
  • 通过这种方式,TypeScript(和ES6的类)支持基于类的面向对象编程中的继承和构造函数调用,允许开发者构建复杂的类层次结构。