我是Node js的新手,实际上我无法理解如何在类中调用方法,除非是静态的,或者每次我遍历函数时都要创建一个新对象。
这有点疯狂。例如:
class UserController
{
methodOne (req, res) {
this.methodTwo (req);
}
methodTwo (data) {
return data;
}
}
这就是我想调用我的函数的方式,但是每次执行此操作时,我都会得到this
的错误未定义。
我知道fat arrow functions
不会遵循javascript中相同的上下文。但是我只是想确定自己是否做对了。
这就是我实现上述代码的方式。
class UserController
{
static methodOne (req, res) {
UserController.methodTwo (req);
}
static methodTwo (data) {
// Manipulates request before calling
return UserController.methodThree (data);
}
static methodThree (data) {
return data;
}
}
即用类名UserController
静态调用每个方法。
因此,如果有更好的方法,我需要您提出建议。 预先感谢。
PS:上面的代码只是一个例子。
答案 0 :(得分:2)
问题的原因是您丢失了函数上下文
class UserController {
async methodOne() {
return this.methodTwo()
}
async methodTwo() {
return Promise.resolve("methodtwo")
}
}
const obj = new UserController();
const methodOne = obj.methodOne;
methodOne(); // ----> This will throw the Error
methodOne.call(obj); // ----> This Works
// Or you can call the method directly from the obj
obj.methodOne(); // Works!!
// If you want to cache the method in a variable and preserve its context use `bind()`
const methodOneBound = obj.methodOne.bind(obj);
methodOneBound(); // ----> This works