具有可视化的类:
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();
导出方式是否错误?我该怎么解决?
答案 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 }}(如果需要)。