Object.assign не является функцией

Я использую babel с gulp и создаю простую библиотеку DOM в ES6. Но после запуска, и когда я его буду использовать, я получил консоль Object.assign is not a function в хром.

это код gulp

gulp.task('scripts', function() {
    return gulp.src(src + 'js/*.js')
      .pipe(babel())
      .pipe(concat('main.js'))
      .pipe(gulp.dest(dest + 'js'));
});

это файл класса

class DOM {
    constructor( selector ) {
        var elements = document.querySelectorAll(selector);

        this.length = elements.length;

        Object.assign(this, elements);
    }

    ...

}

const dom = selector => new DOM(selector);

и я использую его на стороне клиента, например dom('#elId');

Ответ 1

Как я подозреваю, вы уже знаете, Google Chrome использует V8, который поддерживает ECMAScript 5th edition. Object.assign представлен в 6-м выпуске ECMAScript.

Чтобы использовать эти дополнения, вам нужно включить ES6 polyfill, предоставленный Babel:

Это будет эмулировать полную среду ES6. [...]

Доступно из файла browser-polyfill.js в версии babel-core npm. Это должно быть включено до всего вашего скомпилированного кода Babel. Вы можете либо добавить его к скомпилированному коду, либо включить его в <script> до него.

Ответ 2

  • Установить babel-core:

$ npm install babel-core --save-dev

  1. Импортировать модуль polyfill в js:

import 'babel-core/polyfill';

  1. Используйте babel для компиляции вашего кода!