创建一个有方法返回实例this的抽象类。

我正试图创建一个抽象类 ParseContent 允许它的实现者实现一个 parse 方法,但问题是 ParseContent 抽象类有其他方法,返回继承类的实例,这可能吗?

export abstract class ParseContent extends RawContent { 
  parsed: any

  constructor(params: ConstructorParameters<typeof RawContent>[0] & {
    parsed: any
  }) {
    super(params)
    this.parsed = params.parsed
  }

  abstract parse<T> (content: string): T

  static fromString(opt: Parameters<typeof RawContent['fromString']>[0]) { 
    const pureOpts = super.fromStringOpts(opt)
    const parsed = this.parse(pureOpts.content)
    return new this({ ...pureOpts, parsed })
  }

  static async fromPath(opt: Parameters<typeof RawContent['fromPath']>[0]) { 
    const pureOpts = await super.fromPathOpts(opt)
    const parsed = this.parse(pureOpts.content)
    return new this({ ...pureOpts, parsed })
  }

}

export class JSONContent extends ParseContent { 
  static parse(content: string): any { 
    return JSON.parse(content)
  }
}

解决方案:

因为你使用的是 new this 在你 static 成员,它们将创建它们被调用的任何类的实例。例如,对 JSONContent.fromPath(...) (JSONContent 继承自 ParseContent,因为 ParseContent 的雏形。 JSONContent – 一个相当具体的JavaScript和TypeScript的功能)将创建一个 JSONContent 例如,因为在调用 fromPath, thisJSONContent. 它将使用 parse 关于 JSONContent 出于同样的原因。thisJSONContent.

例如,你可以给子类提供覆盖的能力。

class Parent {
    static wrapper() {
        return this.create();
    }
    static create() {
        const ctor = (this && this[Symbol.species]) || this;
        return new ctor();
    }
}

class Child extends Parent {
}
console.log(Child.create() instanceof Child);  // true
console.log(Child.wrapper() instanceof Child); // true

给TA打赏
共{{data.count}}人
人已打赏
未分类

在日历上获取所有事件的下拉值的第一个索引?

2022-9-13 14:51:39

未分类

Plotly。使用plotly express line时,如何在hoverinfo中格式化日期?

2022-9-13 14:51:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索