2016-01-04 12 views
9

Quando si definisce una classe in ES6, sarà disponibile in ambito globale, che si può prevenire con la nuova recinzione staffa ES6:Come utilizzare i moduli ES6 invece degli spazi dei nomi nell'ambito globale?

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

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

ho più file js, ognuno con la propria definizione di classe, e io rendere le classi disponibili tramite MYNAMESPACE nell'ambito globale. Quindi la creazione di una nuova vettura da qualsiasi luogo si presenta come:

var myCar = new MYNAMESPACE.Car(); 

Come ho potuto utilizzare i moduli ES6 per questo? E 'anche possibile, o raccomandabile?

risposta

9

Si dovrebbero utilizzare le esportazioni e le importazioni ES6 invece di rendere le classi disponibili nell'ambito globale.

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

leggere su sintassi modulo ES6 da

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

Grazie! Un semplice esempio può fare molto! Questi link tendono a sovraccaricare il povero lettore con gli esempi più elaborati del mondo :) – Kokodoko

+0

A proposito, posso escludere le parentesi {} anonime all'inizio/alla fine di ogni classe? Qual è il modo migliore per avviare una app.js principale dopo window.onload? – Kokodoko

+0

@Kokodo puoi lasciarli fuori. Per l'inning puoi includere un file js con