有关在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()导出到路由器方法而该对象不再存在于内存中?
答案 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());