0

有一个视觉类:

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();

是不是导出的方式不对?我该如何解决?

4

2 回答 2

2

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

const result = await fun2();变得如此const result = await this.fun2();

于 2019-12-12T13:39:52.933 回答
0

this这是一个类里面的值的非常重要的话题。

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

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

一般来说,您希望this类内部的值等于您创建的类的实例,因为这就是您将如何引用在您的类中定义的不同实例变量和方法的方式。

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

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

fun1() {
    this.fun2();
}

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

因此,如果您看到 this 内部的值fun1()不是您所期望的,那么您知道您需要修复它以调用您的类中的不同方法并确保 valuethis是您期望的值。

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

于 2019-12-12T16:48:43.810 回答