【发布时间】:2020-09-11 06:45:58
【问题描述】:
我说的是:
class MyAction {
}
class MyActionEdit extends MyActionNew { // <-- error pointing here
}
class MyActionNew extends MyAction {
}
我收到以下错误:Uncaught ReferenceError: Cannot access 'MyActionNew' before initialization.
在加载所有 js 之前,我没有创建实例。所以我不明白,为什么吊装在这里不起作用。问题是:我无法更改类定义的顺序(它们是从各种文件中加载并组合到一个大脚本中 - 在本例中为 3 个组合文件)。
我已经阅读了这个问题和许多其他问题,但没有人回答我的问题。
这在这里工作例如:
class MyAction {
}
let test: MyActionNew = new MyActionNew(); // <- Hoisting works here
class MyActionEdit extends MyAction {
}
class MyActionNew extends MyAction {
}
我该如何处理?我不知道这是否有帮助,但我正在使用打字稿来生成 javascript 文件。会不会有事?
相关: Typescript class: will class be hoisted when I use two classes?
我已经在 stackoverflow 上阅读了所有带有“提升”标签的问题,但没有找到答案。
【问题讨论】:
-
向上扩展
MyActionNew,向下扩展MyAction,其中的女巫现在是正确的 -
Javascript 分两步执行:1) 解析/编译,2) 运行时。提升是有效的,因为变量名等某些东西是在解析步骤中创建的,因此在运行时已经存在。但是您想要的一切都发生在解析步骤中,并且在该步骤中,顺序必须是合乎逻辑的;那里没有吊装。
-
简而言之 -
why hoisting is not working here- 因为类定义没有被提升 -
@Thomas 这里没有循环扩展。只是
MyAction→MyActionNew→MyActionEdit。只是声明的顺序搞砸了。
标签: javascript typescript hoisting