TypeScript 继承实现:不使用 extends、中间类、Object.assign 和 Object.setPrototypeOf

在 TypeScript 中,我们可以使用 extends 关键字来实现继承。然而,有时我们可能需要在不使用 extends 关键字的情况下实现继承,并且需要保留子类自身的方法。例如,以下代码演示了如何通过原型链实现继承,并保留子类 methodC 的内容:

class Parent {
  constructor() {}
  public methodA() {}
  public methodB() {}
}

class Child {
  constructor() {
    const parent = new Parent();
    Object.setPrototypeOf(this, parent);
  }
  public methodC() {}
}

Child 类中,我们通过创建一个 Parent 的实例,并将该实例设置为 Child 的原型对象来实现继承。这种方式可以保证 Child 实例可以访问 Parent 的方法 methodAmethodB,同时 Child 自身的原型对象没有被修改,因此 Child 的原型链上仍然存在 methodC 方法。

注意:

  • Object.setPrototypeOf 方法用于修改对象的原型对象,它不会覆盖原有的原型对象,而是将其替换为新的原型对象。

  • 在使用原型链实现继承时,需要注意原型对象和实例对象之间的关系。原型对象是所有实例对象共享的,因此对原型对象的修改会影响所有实例对象。

通过这种方法,我们可以实现继承并保留子类的自身方法,并且不使用中间类、Object.assignObject.setPrototypeOf


原文地址: https://www.cveoy.top/t/topic/o0FI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录