2017-01-07 4 views
0

Прежде всего я хотел бы сказать, что я действительно не знаю, как я могу объяснить, что я сделал, чтобы получить ошибку, упомянутую в названии (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)); 

The error within the console

Это не скомпилированный код этого:

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 получила эту ошибку, состояла в том, что была прописная буква, где никто не был допущен. Я ничего не нашел о причине этой ошибки. У кого-то есть идея, почему я получаю эту ошибку? И есть ли у кого-то решение?

+0

Что такое 'Node'? Если это DOM 'Node', вы не можете расширять его в JavaScript. –

+0

Если вы не можете создать экземпляр 'Node' (и вы не можете), вы, очевидно, также не сможете создать экземпляр класса child. – estus

+0

Вам нужно импортировать файл, который вам нужно продлить, или это также нормально, если класс, который должен быть расширен, определяется в том же файле (поэтому без 'export default superClass')? – Galago

ответ

1

Похоже, вы пытаетесь расширить DOM Node. Вы не можете этого сделать, это функция, предоставляемая хостом, которая несовместима с необходимой сантехникой JavaScript.

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