javascript循环依赖

发布于 2022-09-12 13:58:54 字数 1038 浏览 26 评论 0

我建了三个类分别为Stmt,IfStmt,WhileStmt,其中Stmt为基类,后两个为派生类我把他们分别保存在三个文件中,其中IfStmt,WhileStmt引入了Stmt文件,Stmt也引入了IfStmt,WhileStmt,然后在执行的时候出现了这个错误
class extends value undefined is not a constructor or null

在线代码地址(包含了tsconfig.json)

Stmt.ts

import { Stmt } from "./Stmt";
export class IfStmt extends Stmt {
  static parse(source: string): void {
    console.log("IfStmt.parse");
  }
}

WhileStmt.ts

import { Stmt } from "./Stmt";
export class WhileStmt extends Stmt {
  static parse(source: string): void {
    console.log("WhileStmt.parse");
  }
}

Stmt.ts

import { IfStmt } from "./IfStmt";
import { WhileStmt } from "./WhileStmt";
export class Stmt {
  static parseStmt(source: string): void {
    if (source === "if") IfStmt.parse(source);
    else if (source === "while") WhileStmt.parse(source);
  }
}

感觉这个需求还是挺常见的,除了全部写在一个文件里,还有没有什么好的办法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

染火枫林 2022-09-19 13:58:54

典型的反设计模式。

基类怎么能“预先”知道子类呢?

你现在放到基类的那坨代码,应该再抽一个工厂类出来,就是一个简单的工厂模式。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文