typescript调用函数结果未定义

时间:2017-09-14 11:54:51

标签: typescript

有关在typescript中调用函数的问题

我有一个班级

 export class Test{
     constructor(){}

     public func1(req:request,res:Response) {
 // call method
        let func2 =  this.Func2();

     }

     private Func2():string{
       return "Hello";
   }
}
export default new Test();

我有一个快速的路由器类

import {Router} from "express";
import Test from '../Handlers/Test';
export class UserRouter {

router: Router;

constructor() {
    this.router = Router();

}

Routes() {
    this.router.route('/user').post(Test.Func1);
    return this.router;
}

}

export default new UserRouter().Routes();

问题是当我尝试在Func1()方法中使用this.Func2()调用方法Func2时,我得到一个错误,指出无法调用未定义的Func2。我要么以两种方式打电话呢

1)`新的Test()。Func2()在Func1()方法中作为

public Func1(req:request,res:Response){
   let func2 = new Test().Func2();
}

2)将Func2()设为静态,然后使用Test.Func2()

调用它
public Func1(req:request,res:Response){
   let func2 = Test.Func2();
}

private static Func2():string{
   return "Hello";
}

为什么我不能使用this.Func2()来调用它?

是否因为我将新的Test()导出到路由器方法而该对象不再存在于内存中?

2 个答案:

答案 0 :(得分:1)

1) Test.Func2()

这不适用于Typescript级别,因为您的方法是私有的,因此无法从外部访问。

2) Test

这会将函数保留在this本身内,因此该函数不会附加到任何对象( class Test{ constructor(){} func1(req,res) { let func2 = this.func2(); console.log(func2); } func2(){ return "Hello"; } } const t = new Test(); t.func1();)。

您的代码怎么样?

您的代码正常运行。这是你尝试过的相同代码吗?

actionOnItemAtPosition

答案 1 :(得分:0)

你的问题是:

this.router.route('/user').post(Test.Func1);

您正在传递Test.Func1以便稍后作为回调调用,当最后调用该函数时,this的范围将不是实例(Test),而是其他内容,所以你有两个选择:

(1)绑定它:

this.router.route('/user').post(Test.Func1.bind(Test));

(2)箭头功能:

this.router.route('/user').post(() => Test.Func1());