将代码模块化,可以实现代码的重用,用以支持大规模的程序开发。可以将代码组织到类来实现代码模块化也可以采用其他方式。一般,模块是一个独立的js文件,模块文件可以包含类的定义、一组相关的类、一个使用函数库等。另外,模块文件文件名应该与命名空间匹配
Javascript并没有定义用以支持模块的语言结构,例如不能通过使用imports和exports(imports和exports仍是javascript保留的关键字),很多js库和客户端框架都包含了模块系统,例如在Nodejs中可以使用require导入需要的模块。
代码模块化时,不同的模块必须避免修改全局执行上下文,以保证后续模块在他们所期望进行的原始上下文中进行。
1. 使用对象作为命名空间,将函数和值作为命名空间对象属性存储,而不是定义全局函数和变量,用以保持干净的全局命名空间
eg:
//定义set属性SinletonSet var sets = {}; sets.SingletonSet = sets.AbstractEnumerableSet.extend(); //使用 var ss = new sets.SingletonSet();
使用时也可以将常用的值导入到命名空间中,eg:
//定义set属性SinletonSet var sets = {}; sets.SingletonSet = sets.AbstractEnumerableSet.extend(); //使用 var set = sets.SingletonSet(); var ss = new set();
2. 模块中一些辅助函数或者方法如果要自爱模块外部不可见,可以将模块定义在某个函数的内部。如果想使代码在一个私有命名空间中运行,只需给这段代码奖赏前缀(function(){}())
eg:
var Set = (function invoke(){ function Set(){ ..... } ....... return Set; }());