有两个类, 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的表达参数可以完美地传递。
答案 0 :(得分:0)
这是因为 / loginA 中的“ this”上下文引用窗口obj,而在 / loginB 中,“ this”具有箭头功能,它显然是指obj类。
查看此视频以获取更多信息:https://www.youtube.com/watch?v=tvocUcbCupA