TypeScript 继承实现:不使用 extends 关键字的原型链方法
TypeScript 继承实现:不使用 extends 关键字的原型链方法
在 TypeScript 中,通常使用 extends 关键字实现继承。然而,当需要在不使用 extends 的情况下实现继承,并且需要保留子类方法时,可以使用原型链的方式。
问题背景:
假设我们有两个类,Parent 和 Child。Parent 类拥有 methodA 和 methodB 方法,Child 类需要继承 Parent 类的方法,并且需要添加自己的 methodC 方法。
常见的错误方法:
- 使用
Object.assign:Object.assign无法合并原型对象 (prototype),因此无法实现继承。 - 使用
Object.setPrototypeOf:Object.setPrototypeOf会修改自身原型对象 (prototype),导致子类的methodC方法丢失。
解决方案:原型链继承
- 创建一个新的空对象作为子类的原型。
- 将父类的原型赋值给这个空对象的原型。
这样,子类就可以继承父类的方法,同时保留自己的新方法。
示例代码:
class Parent {
constructor() {}
public methodA() {}
public methodB() {}
}
class Child {
constructor() {
const childPrototype = Object.create(Parent.prototype);
Object.setPrototypeOf(this, childPrototype);
}
public methodC() {}
}
const child = new Child();
child.methodA();
child.methodB();
child.methodC();
解释:
- 在
Child的构造函数中,首先创建了一个空对象childPrototype,并将其原型设置为Parent.prototype。 - 然后,使用
Object.setPrototypeOf将childPrototype设置为当前实例的原型。
通过这种方式,Child 继承了 Parent 的方法,同时保留了自己的 methodC 方法。
总结:
本文介绍了在 TypeScript 中,不使用 extends 关键字,通过原型链的方式实现继承,并保留子类方法的技巧。这种方法可以避免使用 Object.assign 和 Object.setPrototypeOf 导致的问题,同时提供了灵活的继承方式。
原文地址: https://www.cveoy.top/t/topic/o0FQ 著作权归作者所有。请勿转载和采集!