1. ホーム
  2. javascript

[解決済み] EcmaScript 6 での不正なコンストラクタ

2022-02-18 06:46:02

質問

まず最初に、タイトルにあるようなエラーが発生するために何をしたのか、どう説明すればいいのかよくわからないということをお伝えしたいと思います( uncaught TypeError: Illegal constructor ). Ecmascript 6をプレーンなJavascriptにコンパイルするためにgulpfileを使用しています。私のgulpfileは次のようなものです。

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);
}

私は、すべてのファイルがBabelでコンパイルされた後、1つのファイル(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 なぜなら、他のモジュールでモジュールをインポートしていないからです(すべてのファイルが1つのファイルに変換され、そこにすべてがアクセスできるため、これは必要ではありません)。

私はいくつかの研究を行い、人々がこのエラーを取得した唯一の理由は、何も許されないところに大文字があったためです。このエラーの原因について、他には何も見つかりませんでした。なぜこのエラーが発生するのか、誰か心当たりはありませんか?また、解決策をお持ちの方はいらっしゃいますか?

解決方法は?

DOM の Node . それはできません。抽象的なインターフェースとして定義されており、そのためにブラウザで公開されているホスト提供の関数は、(たとえサブクラスであっても)コンストラクタとして呼び出すことはできません。