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()
becomeseconst result=wait this.fun2()代码>在javascript中,当您想在一个类中使用一个方法,而在同一个类中使用另一个方法时,您必须在它前面加上这个前缀
因此const result=wait fun2()
becomeseconst 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()