Прежде всего я хотел бы сказать, что я действительно не знаю, как я могу объяснить, что я сделал, чтобы получить ошибку, упомянутую в названии (uncaught TypeError: Illegal constructor
). Я использую gulpfile для того, чтобы скомпилировать мой Экмаскрипт 6 в обычный Javascript. Моя gulpfile выглядит следующим образом:Незаконный конструктор с EcmaScript 6
var gulp = require('gulp');
var concat = require('gulp-concat');
var babel = require('gulp-babel');
gulp.task('compile', function() {
return gulp.src(['resources/assets/js/*.js', 'resources/assets/js/components/*.js'])
.pipe(babel({
presets: ['es2015']
}).on('error', logError))
.pipe(concat('bundle.js'))
.pipe(gulp.dest('public/js'));
});
gulp.task('watch', function() {
gulp.watch('resources/assets/js/**/*', ['compile']);
})
gulp.task('default', ['watch']);
function logError(err) {
console.log(err);
}
У меня есть файловая система, где все файлы объединяются в один файл (bundle.js), после того, как скомпилирован с Бабелем.
В консоли браузеров (либо Chrome или Firefox), ошибка появляется, и он находится в следующей строке:
var _this = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, element));
Это не скомпилированный код этого:
class Dropdown extends Node {
constructor(element) {
super(element);
this.registerEvents(['click', 'change', 'blur']);
}
onClick() {
this.$element.addClass('clicked');
}
}
И это скомпилированный код одного и того же класса:
var Dropdown = function (_Node) {
_inherits(Dropdown, _Node);
function Dropdown(element) {
_classCallCheck(this, Dropdown);
var _this = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, element));
_this.registerEvents(['click', 'change', 'blur']);
return _this;
}
_createClass(Dropdown, [{
key: 'onClick',
value: function onClick() {
this.$element.addClass('clicked');
}
}]);
return Dropdown;
}(Node);
Я не использую export default Dropdown
, потому что я не импортирую модули в другие модули (это не требуется, потому что каждый файл преобразуется в один файл, где все доступно).
Я провел некоторое исследование, и единственная причина, по которой ошибка Peoeple получила эту ошибку, состояла в том, что была прописная буква, где никто не был допущен. Я ничего не нашел о причине этой ошибки. У кого-то есть идея, почему я получаю эту ошибку? И есть ли у кого-то решение?
Что такое 'Node'? Если это DOM 'Node', вы не можете расширять его в JavaScript. –
Если вы не можете создать экземпляр 'Node' (и вы не можете), вы, очевидно, также не сможете создать экземпляр класса child. – estus
Вам нужно импортировать файл, который вам нужно продлить, или это также нормально, если класс, который должен быть расширен, определяется в том же файле (поэтому без 'export default superClass')? – Galago