调用实例化类函数的正确方法是什么?

时间:2019-05-20 05:57:45

标签: node.js typescript express oop

有两个类, LoginRoute类 LoginController类。类LoginRoute,LoginController类型的私有变量,将按预期进行初始化。但是,当调用对象函数时,会出现一些不稳定的行为。

案例A 如果直接从路由器调用LoginController对象函数,则该对象似乎被破坏(无法引用 this )。

案例B 如果在路由器的回调函数中调用LoginController对象函数,则该对象将保留(可以引用 this

class LoginRoute {
    private _loginController: LoginController

    constructor () {
        this._loginController = new LoginController()  
    }
    get routes () : express.Router {
        let router = express.Router()

    // ******************* CASE A (Not working)*****************
        router.post('/loginA', this._loginController.login) 


    // ******************* CASE B (Working)*****************
        router.post('/loginB', (req : express.Request, res :  express.Response) => {  
            this._loginController.login(req, res)
        })
        return router
    }
}

控制器类如下

class LoginController {
    login(req: express.Request, res: express.Response):void {
        console.log(req.body)
        this.sample()
    }
    sample () {
        console.log('Sample')
    }
}

在两种情况下 / loginA和/ loginB ,我都希望看到相同的输出。但是,“ this”在A中是未定义的,而在B中则可以完美地工作。 req和res的表达参数可以完美地传递。

1 个答案:

答案 0 :(得分:0)

这是因为 / loginA 中的“ this”上下文引用窗口obj,而在 / loginB 中,“ this”具有箭头功能,它显然是指obj类。

查看此视频以获取更多信息:https://www.youtube.com/watch?v=tvocUcbCupA