javascript - Nemožno volať atribút deklarovaný v konštruktore z metódy triedy


Mám HomeController, ktorý má metódu index. V konštruktore som deklaroval túto premennú this.data. Keď volám this.data v metóde index, dostanem chybu s hlásením ako

TypeError: Nie je možné prečítať vlastnosť 'data' z nedefinovanej hodnoty

Tento HomeController:

import Controller from "./../../vendor/controller";
import * as express from "express";
import hException from "./../helper/exception.helper";

class HomeController extends Controller {
    data:object
    constructor(){
        super()
        this.data = {
            tes: 'tes'
        }
    }
    async index(request:express.Request, response:express.Response, next:express.NextFunction):Promise<any>{
        try {
            let template =  'home/index';
            //next to viewer
            response.render(template, { layout: 'dashboard', data: this.data});
        } catch (error) {
            next(new hException(error))
        }
    }
}

export default HomeController

Trasy, ktoré volajú HomeController:

import * as express from "express";
import Controller from "./../../controller/home.controller";

import { Jwt as MJwt } from "./../../middleware/auth.middleware";

class Routes {
    private router:express.Router = express.Router()
    private path:string = '/'
    private controller:Controller
    private MJwt = new MJwt()
    constructor() {
        this.controller = new Controller;
        this.run()
    }

    public run(){
        this.router.route(this.path)
            .get(
                this.controller.index
            );
    }
}

export default Routes

Odpoveď č. 1

Tento problém bol vyriešený deklarovaním metódy HomeController s arrow function, odkaz na podrobnosti. alebo použitím bind funkcie, odkaz na podrobnosti.

Riešené pomocou šípovej funkcie