2016-02-15 6 views
1

Может ли кто-нибудь объяснить смысл действующего кода ES6?ES6 множественное наследование?

'use strict'; 

class first { 
    constructor() { 
    } 
} 

class second { 
    constructor() { 
    } 
} 

class third extends (first, second) { 
    constructor() { 
     super(); 
    } 
} 

Насколько я знаю, нет множественного наследования в JavaScript, но синтаксис показан в примере не бросает какую-либо ошибку (в Node.js 4.3.0), и она работает, .. - как я пытаюсь понять, или что он там делает ...

Кроме того, я заметил, что если я прокомментирую звонок super(), тогда код начинает метать ошибку ReferenceError: this is not defined.

+0

@Tushar этот вопрос был о Babel, этот один примерно ES6. –

+1

'(первый, второй)' является оператором запятой и оценивается как 'second'. «первый» выброшен. –

+0

Этот вопрос не имеет отношения к Вавилону. Babel - это просто инструмент/библиотека, чтобы использовать ES6 раньше, когда браузеры не поддерживают его. – Tushar

ответ

4

Это всего лишь путаный случай comma operator.

(1, 2) // 2 
(1, 2, 3) // 3 
(first, second) // second 

Он не выдаст ошибку, потому что это действительный синтаксис, однако он не работы в том смысле, что вы ожидали либо. third наследует только от second.

Мы можем проверить, что это так, скомпилировав синтаксис ES5, чтобы проверить, что это не влияет на определение класса.

var third = (function (_ref) { 
    _inherits(third, _ref); 

    function third() { 
    _classCallCheck(this, third); 

    _get(Object.getPrototypeOf(third.prototype), 'constructor', this).call(this); 
    } 

    return third; 
})((first, second)); 

Результат оценки (first, second) передается как _ref, то third_inherits от него.

+0

Вы уверены? Если мы прокомментируем 'super()', тогда код начинает выдавать ошибку: 'ReferenceError: это не определено'. Но похоже, что только «второй» наследуется. –

+0

Да, я уверен. Посмотрите на скомпилированную версию ES5. –

+0

Это начинает иметь смысл, хотя это действительно запутывает, как выглядит синтаксис. –

Смежные вопросы