TypeScript 继承:在不使用 extends 关键字的情况下实现继承并保留方法
TypeScript 继承:在不使用 extends 关键字的情况下实现继承并保留方法
在 TypeScript 中,通常使用 extends 关键字来实现继承。但是,在某些情况下,可能需要在不使用 extends 关键字的情况下实现继承,例如:
- 为了兼容不支持
extends的旧版代码 - 为了避免使用
extends关键字带来的某些限制
本文将介绍一种在不使用 extends 关键字的情况下,实现继承并保留子类方法的方法。
问题描述
假设我们有两个类:Parent 类和 Child 类。Parent 类包含两个方法 methodA 和 methodB,Child 类包含一个方法 methodC。我们希望 Child 类继承 Parent 类的方法,同时保留 methodC 方法。
以下代码展示了使用 Object.setPrototypeOf 方法实现继承,但是会导致 methodC 方法丢失:
class Parent {
constructor() {}
public methodA() {}
public methodB() {}
}
const parent = new Parent();
class Child {
constructor() {
Object.setPrototypeOf(this, Object.getPrototypeOf(parent));
}
public methodC() {}
}
const child = new Child();
child.methodA(); // 正常执行
child.methodB(); // 正常执行
child.methodC(); // 报错:child.methodC is not a function
解决方法
要实现继承并保留methodC方法,可以使用Object.assign方法将Parent类的原型方法复制到Child类的原型上。修改后的代码如下:
class Parent {
constructor() {}
public methodA() {}
public methodB() {}
}
const parent = new Parent();
class Child {
constructor() {
Object.assign(Child.prototype, Object.getPrototypeOf(parent));
}
public methodC() {}
}
const child = new Child();
child.methodA(); // 正常执行
child.methodB(); // 正常执行
child.methodC(); // 正常执行
这样,Child类将继承Parent类的方法,并且保留了methodC方法。
总结
本文介绍了在 TypeScript 中,不使用 extends 关键字的情况下,如何实现继承并保留子类的方法。通过 Object.assign 方法将父类原型方法复制到子类原型上,实现了继承功能。这种方法可以有效地避免使用 extends 关键字带来的某些限制,并实现灵活的继承关系。
原文地址: https://www.cveoy.top/t/topic/o0EV 著作权归作者所有。请勿转载和采集!