Typescript-在非箭头类方法中未定义的“ this”

时间:2019-06-19 11:48:40

标签: javascript typescript this

我知道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);

0 个答案:

没有答案