面向对象的JS(五) 模块化和命名空间
面向对象的JS(5) 模块化和命名空间
模块化
一旦我们有很多自定义对象类型,我们需要对它们进行分组,并管理他们的可见性、依赖性和加载。命名空间和模块可以用来处理这些任务。(需要注意的是EcmaScript v6(Harmony)正在开发一个成熟的模块系统,由浏览器支持标准前我们也可以利用现有的一些库来实现这些功能。)
参考文章:http://www.sencha.com/blog/toward-modern-web-apps-with-ecmascript-6
1 命名空间
目前在JavaScript中没有直接的命名空间支持。我们可以通过创建对象并给对象属性填充对象类型来创建命名空间。
2 模块化
模块化是将我们的JavaScript代码划分为包的一种方式。模块暴露某些对象类型定义且引入其他模块。模块系统加载每个模块及其依赖。首先它以适当的顺序运行依赖,然后执行模块代码。我们可以用一些库来实现。
在模块中,我们定义一些新类型,从其他模块引入一些类型并暴露公有类型。下面是一个模块定义的范例:
模块化
一旦我们有很多自定义对象类型,我们需要对它们进行分组,并管理他们的可见性、依赖性和加载。命名空间和模块可以用来处理这些任务。(需要注意的是EcmaScript v6(Harmony)正在开发一个成熟的模块系统,由浏览器支持标准前我们也可以利用现有的一些库来实现这些功能。)
参考文章:http://www.sencha.com/blog/toward-modern-web-apps-with-ecmascript-6
1 命名空间
目前在JavaScript中没有直接的命名空间支持。我们可以通过创建对象并给对象属性填充对象类型来创建命名空间。
//create namespace var myLib = {}; myLib.myPackage = {}; //Register types to namespace myLib.myPackage.MyType1 = MyType1; myLib.myPackage.MyType2 = MyType2;
2 模块化
模块化是将我们的JavaScript代码划分为包的一种方式。模块暴露某些对象类型定义且引入其他模块。模块系统加载每个模块及其依赖。首先它以适当的顺序运行依赖,然后执行模块代码。我们可以用一些库来实现。
在模块中,我们定义一些新类型,从其他模块引入一些类型并暴露公有类型。下面是一个模块定义的范例:
Module.define("module1.js", ["dependent_module1.js", "dependent_module2.js", ... ], function (dependentMod1, dependentMod2) { // //导入 //TYPE DEFINITIONS function ExportedType1() { // use of dependent module’s types var dependentType = new dependentMod1.DependentType1(); ... } function ExportedType2() {} ... //导出 return { ExportedType1: ExportedType1, ExportedType2: ExportedType2, ... }; }); //使用 Module.use(["module1.js"], function (aModule) { console.log("Loaded aModule!"); var AType = aModule.AnExportedType; var atype1Instance = new AType(); });