Javascript 如何在全局范围内使用ES6模块而不是名称空间?

Javascript 如何在全局范围内使用ES6模块而不是名称空间?,javascript,oop,ecmascript-6,Javascript,Oop,Ecmascript 6,在ES6中定义类时,它将在全局范围内可用,您可以使用新的ES6支架外壳来防止: { class Car { constructor(make) { this.make = make; this.currentSpeed = 25; } getSpeed(){ console.log(this.make + ' is going ' + this.currentSpeed + ' mph.'); } }

在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模块进行此操作?这是可能的还是值得推荐的?

您应该使用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模块语法

  • MDN:

  • 谢谢一个简单的例子可以走很长的路!这些链接往往会给可怜的读者带来世界上最复杂的例子:)顺便问一下,我能在每节课的开头/结尾省略{}匿名括号吗?在window.onload之后初始化主app.js的最佳方法是什么?@Kokodo您可以将其忽略。对于初始化,您可以只包含一个带-tags的js文件,其中您可以从“/App.js”导入应用程序本身,并在window.onload之后调用init(或者像平常一样将其烘焙到App.js中)。好的,然后我需要转换ES6>ES5,并使用类似Browserify的东西来让'require'关键字在当前浏览器中工作,对吗?(只是想让我的工作流程井然有序:)是的。看看Babelify,它在browserify过程中进行转换。