NodeJS ES6:类模块导出

时间:2018-08-18 06:04:36

标签: node.js class ecmascript-6 module

感谢您阅读我的主题,今天,我对es6中的类有一个疑问,我不为什么在运行时vi go错误。 我有A类:

var B = require("./b");
class A{
    constructor() {
        console.log("Constructor class A");
    }

    helloLoop() {
        console.log("A: Hello loop");
        B.hello();
    }

    helloWithoutLoop() {
        console.log("A: Hello without loop");
     }
}

module.exports = new A();

和B级:

var A = require("./a");
class B{
    constructor() {
        console.log("Constructor class B");
    }

    hello() {
        console.log("B: Hello");
        A.helloWithoutLoop();
    }
}

module.exports = new B();

和测试:

var A = require("./a");
var B = require("./b");

A.helloLoop();

运行测试时,我收到错误消息:

A.helloWithoutLoop();
TypeError: A.helloWithoutLoop is not a function
at B.hello ({work-sapce}\test\b.js:9:11)

我没有那件事! 请帮我! 非常感谢!

2 个答案:

答案 0 :(得分:0)

您具有循环依赖关系。您的主文件要求A,要求B,要求B,要求A(圆形)。做不到在A本身完成加载之前第二次要求A的尝试将返回websitePageChangeNumber = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='websitePage-relativeChangeNumber']"))).get_attribute("innerHTML") ,这就是为什么您会收到奇怪的错误的原因。

通常的解决方案是找到通用代码,并将其放在第三个模块中,其他两个模块都可以加载而没有A加载B和B加载A。

具有A加载C和B加载C。

或更简单的是,只需将A和B放在同一个文件中,这样它们之间就不会循环加载。

答案 1 :(得分:0)

您可以这样称呼他们:

import A from './A';
import B from './B';

A.helloLoop();

这是A类:

import B from './B';

class A{
    constructor() {
        console.log("Constructor class A");
    }

    helloLoop() {
        console.log("A: Hello loop");
        B.hello();
    }

    helloWithoutLoop() {
        console.log("A: Hello without loop");
     }
}

export default new A();

这是B类:

import A from './A';

class B{
    constructor() {
        console.log("Constructor class B");
    }

    hello() {
        console.log("B: Hello");
        A.helloWithoutLoop();
    }
}

export default new B();

看到区别了吗?