我知道JS和TS中的“ this”主题已经涵盖了许多问题,但是我无法找到我所面临的特定问题的答案。我敢肯定,我只是不了解一些基本知识,而在谷歌中找到很多问题,这些问题归结为箭头函数作用域规则。
作为序言,我苦苦挣扎的代码在Node后端上运行。
因此,我创建了一个控制器类,其方法将 not 定义为箭头函数(为演示而简化):
class UserController extends AbstractController {
constructor() { ... }
public async getUsers(x, y): Promise<any> {
return this.processRequest( ... ); //processRequest is a protected async definition on AbstractController
}
}
// ...
export default new UserController()
我遇到的问题是this
中的getUsers()
是undefined
,我自然希望它是它执行的UserController
的实例。
如果我确实将getUsers
转换为箭头函数...
class... {
public getUsers = async (x, y): Promise<any> => {
return this.processRequest( ... );
}
}
...然后按预期运行。
我相信我了解箭头功能this
是如何捕获有关周围范围的工作的;但是在这种情况下,我觉得我缺少两个关键的理解:
this
?我觉得this
应该是UserController
的实例,如果不是,那么至少应该是一些更全局的对象。this
的“包围范围”-存在吗? getUsers()
的调用方式如下:
import UserController from 'user.controller';
userRouter.get('/', authMiddleWare, UserController.getUsers);