模块导出类和功能

时间:2019-12-12 13:32:34

标签: javascript node.js module.exports

具有可视化的类:

class Visual {
    constructor() {...}
    async fun1() {...}
    async fun2() {...}
}
module.exports = Visual;

这里一切正常。但是,我需要对其进行更改,以使fun1取决于fun2的输出。

首先,我尝试以“常规”方式使用它,但表示该函数未定义。

async fun1() {
    const result = await fun2();
    ...
}

所以我尝试了另一种方法,通过导出将函数移到类之外。

    class Visual {
        constructor() {...}
        async fun1() {
               const result = await fun2();
               ...
        }
    }
    module.exports = Visual;
    module.exports = {
        fun2: async function () {...}
    };

代码检查器不再说未定义fun2,而是在创建新的Visual时说它不是构造函数。

const visual = new Visual();

导出方式是否错误?我该怎么解决?

2 个答案:

答案 0 :(得分:2)

如果要在一个类中使用一个方法中的一个方法,而在javascript中使用同一方法,则必须在该方法前加上前缀。

所以const result = await fun2();变成const result = await this.fun2();

答案 1 :(得分:0)

这是类中this的值的非常重要的主题。

一种测试方法,我相信您可以执行以下操作:

fun1() {
    console.log(this);
}

通常来说,您希望类内的this的值等于您创建的类的实例,因为那样您将引用内部定义的不同实例变量和方法。课。

所以我建议以上内容,因为结果应该是该类的一个实例,这意味着您可以访问在该类上定义的不同实例变量以及不同的方法,后者是您遇到的问题。

因此,您通常可以进行测试的另一种方法是,再次尝试删除async/await语法并仅使用非异步功能:

fun1() {
    this.fun2();
}

fun2() {
  console.log('its important that this works');
}

因此,如果您发现fun1()内的this值不是您期望的,那么您就知道需要对其进行修复以调用类内部的不同方法并确保{{1 }}是您的期望。

因此,我建议阅读类中的this的值,特别是如何确定类中的this的值以及如何更改{{1 }}(如果需要)。

相关问题