Javascript 模块导出类和函数

Javascript 模块导出类和函数,javascript,node.js,module.exports,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() {...}
    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没有定义,但当创建一个新的可视化时,它会说它不是构造函数

const visual = new Visual();

出口的方式不对吗?如何解决这个问题?

当您想在javascript中使用一个类中的一个方法,而在同一个类中使用另一个方法时,您必须在它前面加上这个前缀


因此
const result=wait fun2()
becomese
const result=wait this.fun2()

在javascript中,当您想在一个类中使用一个方法,而在同一个类中使用另一个方法时,您必须在它前面加上这个前缀


因此
const result=wait fun2()
becomese
const result=wait this.fun2()

这是类内部的
This
值的一个非常重要的主题

我相信有一种方法可以检验这一点,那就是你可以做到以下几点:

fun1() {
    console.log(this);
}
一般来说,您希望类内部的
this
的值等于您创建的类的实例,因为这就是您引用类内部定义的不同实例变量和方法的方式

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

因此,您可以通过另一种方式进行测试,再次删除
async/await
语法,只使用非异步函数,即尝试:

fun1() {
    this.fun2();
}

fun2() {
  console.log('its important that this works');
}
因此,如果您看到
fun1()
中的这个值不是您所期望的值,那么您知道需要对它进行修复,以调用类中的不同方法,并确保
这个
的值是您所期望的值


因此,我建议阅读类内
this
的值,特别是如何确定类内
this
的值,以及如何在需要时更改
this
的值。

这是类内
this
的值的一个非常重要的主题

我相信有一种方法可以检验这一点,那就是你可以做到以下几点:

fun1() {
    console.log(this);
}
一般来说,您希望类内部的
this
的值等于您创建的类的实例,因为这就是您引用类内部定义的不同实例变量和方法的方式

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

因此,您可以通过另一种方式进行测试,再次删除
async/await
语法,只使用非异步函数,即尝试:

fun1() {
    this.fun2();
}

fun2() {
  console.log('its important that this works');
}
因此,如果您看到
fun1()
中的这个值不是您所期望的值,那么您知道需要对它进行修复,以调用类中的不同方法,并确保
这个
的值是您所期望的值

因此,我建议阅读类内
this
的值,特别是如何确定类内
this
的值,以及如何根据需要更改
this
的值。

等待this.fun2()
等待this.fun2()
等待this.fun2()