尝试使用JS从外部类扩展类时,为什么会出现参考错误

时间:2018-12-18 16:24:39

标签: node.js ecmascript-6

我有以下代码...

class BasePage{
    constructor(driver){
        ...
    }

}
class Section extends BasePage{
    constructor(driver, parent){
        super(driver);
        ...
    }
    ...
}
export {BasePage, Section}

但是,当我尝试将部分移动到自己的文件夹和文件中时,这似乎起作用了。

import {BasePage} from "../BasePage";

export class Section extends BasePage{
    constructor(driver, parent){
        super(driver);
    }
}

我得到一个错误...

  

(节点:12480)UnhandledPromiseRejectionWarning:ReferenceError:未定义BasePage

     

在文件... Section.mjs

这对我来说没有任何意义,如果我取消扩展并尝试实例化它,效果很好...

export class Section{
    constructor(driver, parent){
        new BasePage(driver); // works fine
    }
}

这是怎么回事?为什么我没有定义BasePage?

更新

这是whole code

1 个答案:

答案 0 :(得分:1)

您具有循环依赖项。

  1. index.mjs加载BasePage.mjs
  2. BasePage.mjs在运行Other.mjs之前先加载export class BasePage {}
  3. Other.mjs加载Section.mjs
  4. Section.mjs跳过BasePage.mjs,因为它已从步骤2开始进行。
  5. Section.mjs尝试运行export class Section extends BasePage { /* ... */ },这是由于步骤2中的export class BasePage {}尚未运行而抛出的。

您尚未说明为什么需要在Other内导入BasePage,因此很难推荐更改,但是从本质上讲您不想这样做。