web-dev-qa-db-fra.com

Object.assign n'est pas une fonction

J'utilise babel avec gulp et je crée une bibliothèque DOM simple dans ES6. Mais après avoir couru et quand je vais l'utiliser, j'ai reçu le Object.assign is not a function Dans la console chrome.

c'est le code gulp

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

c'est le fichier de classe

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

        this.length = elements.length;

        Object.assign(this, elements);
    }

    ...

}

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

et je l'utilise côté client comme dom('#elId');

14
TIJ

Comme je suppose que vous le savez déjà, Google Chrome utilise V8 , qui prend en charge ECMAScript 5ème édition. Object.assign est introduit dans ECMAScript 6ème édition.

Pour utiliser ces ajouts, vous devez inclure le polyfill ES6 fourni par Babel:

Cela émulera un environnement ES6 complet. [...]

Disponible sur le browser-polyfill.js fichier dans un babel-core version npm. Cela doit être inclus avant tout votre code Babel compilé. Vous pouvez soit l'ajouter à votre code compilé, soit l'inclure dans un <script> avant cela.

27
Jacob Budin
  1. Installer babel-core:

$ npm install babel-core --save-dev

  1. Importez le module polyfill dans votre js:

import 'babel-core/polyfill';

  1. Utilisez babel pour compiler votre code!
12
Amo Wu