TypeError:无法读取undefined的属性'mytest'

时间:2018-03-01 14:27:25

标签: typescript swagger

我正在使用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
};

1 个答案:

答案 0 :(得分:1)

如果重新分配函数,JavaScript将使用函数上下文(this)的方式,它将获取分配给它的对象的上下文。也就是说this实际上会引用您正在创建的对象。

有几种方法可以解决这个问题,主要是围绕保持对象实例的上下文。

{
  loginByJSON: user.loginByJSON.bind(user),
}

您还可以使用实例绑定方法:

loginByJSON = (req: any, res: any, next: any) => {
  this.mytest(req, res, next);
}

然后该方法将始终绑定到该实例。这样做的缺点是为每个实例创建了一个新函数,但.bind无论如何都会这样做,在这种情况下,您似乎只是出于组织目的这样做而且只创建一次实例。