La clase de interceptor http angularjs (ES6) pierde el enlace a 'esto'

Estoy construyendo y la aplicación AngularJS usando clases ES6 con traceur transpiling a ES5 en formato AMD.

en mi módulo importo la clase interceptor y la registro como un servicio, y luego registro este servicio con los $ httpProvider.interceptors en module.config:

var commonModule = angular.module(moduleName, [constants.name]);

import authenticationInterceptor from './authentication/authentication.interceptor';

commonModule.service('authenticationInterceptor', authenticationInterceptor);

commonModule.config( $httpProvider =>  {
    $httpProvider.interceptors.push('authenticationInterceptor');
});

Mi clase de interceptor inyecta ambos$ q y el$ ventana servicios, los guarda en el constructor para su uso posterior. Seguí esta parte con el depurador y la inyección está ocurriendo correctamente:

'use strict';
/*jshint esnext: true */

var authenticationInterceptor = class AuthenticationInterceptor {

    /* ngInject */
    constructor($q, $window) {
        this.$q = $q;
        this.$window = $window;
    }

    responseError(rejection) {
        var authToken = rejection.config.headers.Authorization;
        if (rejection.status === 401 && !authToken) {
            let authentication_url = rejection.data.errors[0].data.authenticationUrl;
            this.$window.location.replace(authentication_url);
            return this.$q.defer(rejection);
        }
        return this.$q.reject(rejections);
    }
}

authenticationInterceptor.$inject = ['$q', '$window'];

export default authenticationInterceptor;

Cuando hago una solicitud que responde con un401 el interceptor se dispara adecuadamente, pero en el método 'responseError' la variable 'this' apunta al objeto de la ventana y no a mi interceptor, por lo tanto, no tengo acceso aesto. $ q oesto. $ ventana.

¿No puedo entender por qué? ¿Algunas ideas?

Respuestas a la pregunta(9)

Su respuesta a la pregunta