javascript模块化是什么及其优缺点介绍

JavaScript016

javascript模块化是什么及其优缺点介绍,第1张

如今backbone、emberjs、spinejs、batmanjs

等MVC框架侵袭而来。CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs等模块化的JavaScript扑面而

来。web前端已经演变成大前端,web前端的发展速度之快。

1)我们来看看什么是模块化?

模块化是一种将系统分离成独立功能部分的方法,可将系统分割成独立的功能部分,严格定义模块接口、模块间具有透明性。javascript中的模块在一些C、PHP、java中比较常见:

c中使用include 包含.h文件php中使用require_once包含.php文件

java使用import导入包

此中都有模块化的思想。

2)模块化的优缺点:

a>优点:

可维护性

1.灵活架构,焦点分离

2.方便模块间组合、分解

3.方便单个模块功能调试、升级

4.多人协作互不干扰

可测试性

1.可分单元测试

b>缺点:

性能损耗

1.系统分层,调用链会很长

2.模块间通信,模块间发送消息会很耗性能

3)最近的项目中也有用到模块化,

使用的是seajs,但是当引用到jquery,jquery easyui/或者jquery

UI组件时,有可能会用到很多jquery插件,那这样要是实现一个很复杂的交互时,模块间的依赖会很多,使用define()方法引入模块会很多,不知

有么有什么好的方法?

4)附:

内聚度

内聚度指模块内部实现,它是信息隐藏和局部化概念的自然扩展,它标志着一个模块内部各成分彼此结合的紧密程度。好处也很明显,当把相关的任务分组后去阅读就容易多了。 设计时应该尽可能的提高模块内聚度,从而获得较高的模块独立性。

耦合度

耦合度则是指模块之间的关联程度的度量。耦合度取决于模块之间接口的复杂性,进入或调用模块的位置等。与内聚度相反,在设计时应尽量追求松散耦合的系统。

exports和module.exports 都是对外暴露对象接口的,但是使用需要注意以下细节:

例如:这是rocker.js文件

在另一个文件中你这样引用

其实, Module.exports 才是真正的接口, exports 只不过是它的一个辅助工具。最终返回给调用的是 Module.exports 而不是 exports 。

注意:

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

例如:

会以对象(也可叫字典)输出

如果你想在module.js中使用outputA或outputB函数,就得

上面的写法也等同于

exports收集到的属性和方法,并未都赋值给了Module.exports,因为Module.exports已经具备一些属性和方法,因此exports收集来的信息将 被忽略

再次引用执行rocker.js

下面例子中,你的模块是一个类: 想导出的模块为特定的数组类型

可以这样应用它:

下面例子中,你的模块是一个数组: 想导出的模块为特定的数组类型

可以这样应用它

结论: 现在你明白了,如果你 想你的模块是一个特定的类型 就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。