Как использовать модули ES6 вместо пространств имен в глобальном масштабе?

При определении класса в ES6 он становится доступным в глобальной области видимости, которую вы можете предотвратить с помощью нового кронштейна ES6:

{
  class Car {
    constructor(make) { 
        this.make = make;
        this.currentSpeed = 25;
    }

    getSpeed(){
          console.log(this.make + ' is going ' + this.currentSpeed + ' mph.');
    }
  }
  window.MYNAMESPACE.Car = Car;
}

У меня есть несколько js-файлов, каждый со своим определением класса, и я делаю классы доступными через MYNAMESPACE в глобальной области видимости. Итак, создание нового автомобиля из любой точки мира выглядит так:

var myCar = new MYNAMESPACE.Car();

Как я могу использовать модули ES6 для этого? Это вообще возможно или рекомендуется?

1 ответ

Решение

Вы должны использовать экспорт и импорт ES6 вместо того, чтобы делать классы доступными в глобальной области видимости.

// car.js
class Car {
  constructor(make) { 
        this.make = make;
        this.currentSpeed = 25;
  }

  getSpeed(){
    console.log(this.make + ' is going ' + this.currentSpeed + ' mph.');
  }
}

export default Car;

// foo.js    
import Car from "./car"

var car = new Car("ford");
car.getSpeed();

Читайте о синтаксисе модуля es6 от

  1. http://www.2ality.com/2014/09/es6-modules-final.html
  2. MDN:
Другие вопросы по тегам