javascript - 如何从父方法创建子类型的新对象
问题描述
我可能没有正确地问这个问题......但我的班级关系如下:
export class ParentClass {
someProperty: string;
constructor(){}
duplicate() {
const dup = new this; // doesn't work for obvious reasons
return dup;
}
}
export class ChildClass extends ParentClass{
constructor(){
super();
}
}
因为最终我希望这两种情况都能正常工作,并成为它们最初开始的类型:
const shouldBeParent: ParentClass = new ParentClass().duplicate();
const shouldBeChild: ChildClass = new ChildClass().duplicate();
有没有办法可以推断出关于对象本身的构造函数并从中创建一个新实例?
解决方案
你可以这样做:
class ParentClass {
str = 'parent'
constructor(){}
duplicate() {
// return new (<any>this.constructor); as more generic way
return new (<typeof ParentClass>this.constructor);
}
}
class ChildClass extends ParentClass{
str = 'child'
constructor(){
super();
}
}
const shouldBeParent: ParentClass = new ParentClass().duplicate();
const shouldBeChild: ChildClass = new ChildClass().duplicate();
console.log(shouldBeParent.str) // parent
console.log(shouldBeChild.str) // child
推荐阅读
- flutter - 如何修复未来
不是 Flutter 中类型的子类型 - pdf - PDF 到 GeoJSON(不包括标题)
- r - R - 条件格式 styleColorBar 应用于数据表的一行
- reactjs - 需要帮助尝试在 ReactJS 中的输入组件内放置图标
- python - 来自linux下设备的pyvisa不断回答
- java - EntityManager 可以读取数据但不持久化更改
- c# - 只有键的实体框架更新表
- python - 在不覆盖已部署的函数的情况下,将函数增量添加到 Azure Function Host
- amazon-web-services - 如何在 AWS IoT Core 中检查设备是否离线
- https - 可以在 https 标头中发送请求参数吗?