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

TypeScript中如何正确使用父类方法与extends关键字?附类实现示例

在TypeScript中正确使用extends关键字与父类方法

首先帮你梳理下你代码里的关键问题:父类里用箭头函数定义的baseMethod1、baseMethod2其实不是类的原型方法,而是实例属性,这会导致子类继承时出现this绑定异常、无法重写等隐患。下面一步步给你拆解正确的用法:

一、extends的基础使用规则

当子类通过extends继承父类时,必须遵守两个核心要求:

  1. 子类的构造函数必须调用super(),而且要在访问this之前执行——它会触发父类的构造逻辑,完成父类属性的初始化
  2. 子类可以直接继承父类的原型方法,也可以重写父类方法,或者通过super.方法名()调用父类的原始实现

二、你代码里的隐患:箭头函数作为类方法的问题

你父类里的写法:

baseMethod1 = (objToLog): void => { //do stuff }

这种箭头函数是作为实例属性存在的,它的this会被永久绑定到父类实例上,子类即使重写这个方法也无法改变this指向;而且这类方法不会挂载到父类的原型链上,每个子类实例都会创建一份方法副本,造成内存浪费。

三、修正后的完整代码示例

我们把父类的方法改成标准的原型方法,再实现子类的正确继承:

// 假设你已定义如下接口
interface IBaseLogService {
  baseMethod1(objToLog: any): void;
  baseMethod2(objToLog: any): void;
}

interface ILocalLogService extends IBaseLogService {
  localLogHandler(): void; // 子类独有的方法
}

export abstract class BaseLogService implements IBaseLogService { 
  static $inject: string[] = ['$http'];
  
  constructor(private $http: ng.IHttpService){ } 

  // 改为原型方法,不用箭头函数
  baseMethod1(objToLog: any): void { 
    // 父类核心逻辑
    console.log('父类baseMethod1执行', objToLog);
  } 

  baseMethod2(objToLog: any): void { 
    // 父类核心逻辑
    console.log('父类baseMethod2执行', objToLog);
  } 
} 

class LocalLogService extends BaseLogService implements ILocalLogService { 
  // 子类构造函数:必须调用super传递父类依赖
  constructor($http: ng.IHttpService){
    super($http); // 调用父类构造函数,传入$http
  }

  // 子类重写父类方法
  baseMethod1(objToLog: any): void {
    // 先调用父类的baseMethod1逻辑
    super.baseMethod1(objToLog);
    // 添加子类自己的扩展逻辑
    console.log('LocalLogService扩展baseMethod1的逻辑');
  }

  // 实现子类独有的方法,满足ILocalLogService要求
  localLogHandler(): void {
    console.log('子类专属的本地日志处理');
    // 子类方法中也可以直接调用父类的其他方法
    this.baseMethod2({ source: 'local' });
  }
}

四、额外注意点

  • 如果父类是抽象类(abstract),子类必须实现父类中声明的抽象方法(如果有的话)
  • 依赖注入层面:父类已经声明了$inject,子类如果没有额外依赖,不需要重复声明;如果有新依赖,要在$inject里追加并在super()中传递
  • 调用父类方法时,务必用super.方法名(),而不是this.方法名()——后者会优先调用子类的重写实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:27