Методы расширенного класса Babel/ES6 не определены

В настоящее время я использую Babel для написания бэкэнда Node.js в ES6. К сожалению, я столкнулся со странным поведением при расширении определенного класса. Некоторые из моих методов, определенных в расширяющем классе, не определены. Если только я не использую синтаксис ES7 для привязки их к свойству.

Это фактический код, который дает мне это странное поведение:

import { Router } from 'express';

class MyCustomRouter extends Router
{
    constructor() {
        super();

        this.methodWorks();  // works like a charm.
        this.methodDoesnt(); // throws TypeError: _this.methodDoesnt is not a function
    }

    methodWorks = () => {
        // some content
    }

    methodDoesnt() {
        // some content
    }
}

Это фактически расширяет Router из библиотеки expressjs. Так что сейчас мне просто любопытно, может ли кто-нибудь объяснить это поведение и/или есть ли способ исправить это.


person byCedric    schedule 04.02.2016    source источник
comment
Я использую Express 4.13.3 и Babel 6.4.6 с помощью плагинов es2015 i>, этап-0, этап-1, этап-2 и этап-3.   -  person byCedric    schedule 04.02.2016


Ответы (1)


Я заглянул внутрь кода самого ExpressJS, чтобы найти какое-то объяснение. Очевидно, им нравится возвращать совершенно новый и другой контекст из конструктора Router. Это объясняет, почему this совершенно другой и не содержит моих методов...

person byCedric    schedule 04.02.2016