Как правильно вызывать инстанцированную функцию класса? - PullRequest
0 голосов
/ 20 мая 2019

Есть два класса, класс LoginRoute и класс LoginController . Класс LoginRoute, приватная переменная типа LoginController, которая инициализируется как ожидалось. Тем не менее, когда вызывается объектная функция, возникает некоторое ошибочное поведение.

Дело A Если объектная функция LoginController вызывается непосредственно из маршрутизатора, то объект, кажется, разрушается (не может ссылаться на this ).

Дело B Если объектная функция LoginController вызывается в функции обратного вызова из маршрутизатора, то объект сохраняется (может ссылаться на this )

class LoginRoute {
    private _loginController: LoginController

    constructor () {
        this._loginController = new LoginController()  
    }
    get routes () : express.Router {
        let router = express.Router()

    // ******************* CASE A (Not working)*****************
        router.post('/loginA', this._loginController.login) 


    // ******************* CASE B (Working)*****************
        router.post('/loginB', (req : express.Request, res :  express.Response) => {  
            this._loginController.login(req, res)
        })
        return router
    }
}

Класс контроллера следующий:

class LoginController {
    login(req: express.Request, res: express.Response):void {
        console.log(req.body)
        this.sample()
    }
    sample () {
        console.log('Sample')
    }
}

В обоих случаях / loginA и / loginB я ожидаю увидеть один и тот же вывод. Тем не менее, "this" должно быть неопределенным в A, при этом прекрасно работать в B. Экспресс-параметры req и res и проходить идеально.

1 Ответ

0 голосов
/ 20 мая 2019

Это потому, что контекст «this» в / loginA ссылается на окно obj, так как в то время как в / loginB «this» находится в функции стрелки, он явно ссылается нак классу obj.

проверьте это видео для получения дополнительной информации: https://www.youtube.com/watch?v=tvocUcbCupA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...