我有一堂課,另一堂課延伸了第一堂課。在我的代碼中,我創建了擴展類的一個新實體:new MyCustomEndpoint(router);
問題handleIsNotOk是undefined在initMyRoutes
export class MyEndpoint {
constructor(router: express.Router) {
this.initMyRoutes(router);
}
protected initMyRoutes(router: express.Router) {
router.get(`/v1/isok`, this.handleIsOk);
}
protected handleIsOk = (req: express.Request, res: express.Response) => {
res.send(200);
}
}
export class MyCustomEndpoint extends MyEndpoint{
private test = "Test";
protected initMyRoutes(router: express.Router) {
console.log(this.handleIsNotOk); // undefined
console.log(this.handleIsNotOkFn);
router.get(`/v1/isokcustom`, this.handleOk); // this works
router.get(`/v1/isnotok`,this.handleIsNotOk); // this doesn't works
router.get(`/v1/isnotokfn`, this.handleIsNotOkFn); // this doesn't works
router.get(`/v1/isnotokfn`, (req, res)this.handleIsNotOkFn(req,res)); // works but it's ugly since it's different compared to router.get(`/v1/isokcustom`, this.handleOk);
}
protected handleIsNotOk = (req: express.Request, res: express.Response) => {
res.send(200);
}
protected handleIsNotOkFn(req: express.Request, res: express.Response){
console.log(this.test); // undefined
res.send(200);
}
}
...
new MyCustomEndpoint(router);
為什么會這樣?undefined在我看來不應該
uj5u.com熱心網友回復:
我敢打賭這就是原因
router.get(`/v1/isnotokfn`, this.handleIsNotOkFn);
如果你將它系結到實體,它會作業得很好:
router.get(`/v1/isnotokfn`, this.handleIsNotOkFn.bind(this));
uj5u.com熱心網友回復:
自我回答
感謝@mbojko @Keith @VLAZ 和其他所有人的答案。即使技術上正確,解決方案也不符合我的需求。我的用例有點奇怪,我這樣做是有原因的。
僅供參考:這是適合我需求的解決方案
export class MyCustomEndpoint extends MyEndpoint{
constructor(router: express.Router) {
super(router);
this.initCustomRoutes(router);
}
// will be called in the constructor of the super class
protected initMyRoutes(router: express.Router) {
router.get(`/v1/isokcustom`, this.handleOk);
}
private initCustomRoutes(router: express.Router) {
router.get(`/v1/isokcustom`, this.handleOkCustom);
}
protected handleOkCustom = (req: express.Request, res: express.Response) => {
res.send(200);
}
}
uj5u.com熱心網友回復:
您覆寫initMyRoutes并且您正在等待您的母親類呼叫 new initMyRoutes。你應該MyCustomEndPoint在你呼叫的地方有一個建構式initMyRoutes。MyCustomEndPoint從不打電話initMyRoutes
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488170.html
上一篇:如何從API呼叫中獲取簡單資料以在Golang中進行進一步評估
下一篇:如何為唯一性約束添加默認值
