2016-01-04 11 views
9

Przy określaniu klasy w ES6, staje się dostępne w zasięgu globalnym, której można zapobiec z nową obudową zamka ES6:Jak używać modułów ES6 zamiast przestrzeni nazw w zasięgu globalnym?

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

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

mam wiele plików js, każdy z własną definicję klasy, a ja udostępnia klasy za pośrednictwem MYNAMESPACE w zasięgu globalnym. Więc tworząc nowy samochód z dowolnego wygląda następująco:

var myCar = new MYNAMESPACE.Car(); 

Jak mogę korzystać z modułów ES6 do tego? Czy to jest nawet możliwe, czy godne polecenia?

Odpowiedz

9

Powinieneś używać eksportu i importu ES6, zamiast udostępniać klasy w zakresie globalnym.

// 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(); 

Poczytaj o składni modułu ES6 z

  1. http://www.2ality.com/2014/09/es6-modules-final.html
  2. MDN:
+1

Dzięki! Prosty przykład może przejść długą drogę! Te linki mają tendencję do przeciążania słabego czytelnika najbardziej wymyślnymi przykładami na świecie :) – Kokodoko

+0

Przy okazji, czy mogę pominąć {} anonimowe nawiasy na początku/końcu każdej klasy? Jaki jest najlepszy sposób na zainicjowanie głównego app.js po window.onload? – Kokodoko

+0

@Kokodo możesz je pominąć. W celu włączenia możesz po prostu dołączyć plik js z

Powiązane problemy