我正在使用swagger api,当我调用终点时它会显示错误Cannot read property 'mytest' of undefined
class User {
private mytest(req:any, res:any, next:any){
return res.json('test32423423');
}
public loginByJSON(req: any, res: any, next: any) {
this.mytest(req,res,next);
}
}
const user = new User();
export = {
loginByJSON: user.loginByJSON
};
答案 0 :(得分:1)
如果重新分配函数,JavaScript将使用函数上下文(this
)的方式,它将获取分配给它的对象的上下文。也就是说this
实际上会引用您正在创建的对象。
有几种方法可以解决这个问题,主要是围绕保持对象实例的上下文。
{
loginByJSON: user.loginByJSON.bind(user),
}
您还可以使用实例绑定方法:
loginByJSON = (req: any, res: any, next: any) => {
this.mytest(req, res, next);
}
然后该方法将始终绑定到该实例。这样做的缺点是为每个实例创建了一个新函数,但.bind
无论如何都会这样做,在这种情况下,您似乎只是出于组织目的这样做而且只创建一次实例。