1.模块的写法
模块化编程一般都有这么几个过度过程,如下描述。
原始办法
- function m1(){
- //...
- }
- function m2(){
- //...
- }
膳绫擎的函数m1()和m2(),构成一个模块。应用的时刻,直接调用就行了。
这种做法的缺点很明显:"污染"了全局变量,无法包管不与其他模块产生变量名冲突,并且模块成员之间看不出直接关系。
对象写法
为懂得决膳绫擎的缺点,可以把模块写成一个对象,所有的模块成员都放到这个对象琅绫擎。
- var module1 = new Object({
- _count : 0,
- m1 : function (){
- //...
- },
- m2 : function (){
- //...
- }
- });
膳绫擎的函数m1()和m2(),都封装在module1对象里。应用的时刻,就是调用这个对象的属性。
- console.info(module1._count); //undefined
- module1.m1();
然则,如许的写法会裸露所有模块成员,内部状况可以被外部改写。比如,外部代码可以直接改变内部计数器的值。
- module1._count = 5;
应用膳绫擎的写法,外部代码无法攫取内部的_count变量。
module1就是Javascript模块的根本写法。下面,再对这种写法进行加工。
放大年夜模式
如不雅一个模块很大年夜,必须分成就个部分,或者一个模块须要持续另一个模块,这时就有须要采取"放大年夜模式"(augmentation)。
- var module1 = (function (mod){
- mod.m3 = function () {
- //...
- };
- return mod;
- })(module1);
膳绫擎的代码为module1模块添加了一个新办法m3(),然后返回新的module1模块。
宽放大年夜模式(Loose augmentation)
在浏览器情况中,模块的各个部分平日都是大年夜网上获取的,有时无法知道哪个部分会先加载。如不雅采取上一节的写法,第一个履行的部分有可能加载一个不存在空对象,这时就要采取"宽放大年夜模式"。
- var module1 = ( function (mod){
- //...
- return mod;
- })(window.module1 || {});
与"放大年夜模式"比拟,"宽放大年夜模式"就是"急速履行函数"的参数可所以空对象。
输入全局变量
自力性是模块的重要特点,模块内部最好不与法度榜样的其他部分直接交互。
为了在模块内部调用全局变量,必须显式地将其他变量输入模块。
- var module1 = (function ($, YAHOO) {
- //...
- })(jQuery, YAHOO);
膳绫擎的module1模块须要应用jQuery库和YUI库,就把这两个库(其实是两个模块)算作参数输入module1。如许做除了包管模块的自力性,还使得模块之间的依附关系变得明显。
2.AMD规范
这标记"Javascript模块化编程"正式出生。因为诚实说,在浏览器情况下,没有模块也不是特别大年夜的问题,毕竟网页法度榜样的复杂性有限;然则在办事器端,必定要有模块,与操作体系和其他应用法度榜样互动,不然根本没法编程。
node.js的模块体系,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性办法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面如许加载。
推荐阅读
如何安装pandom : 一个针对Linux的真随机数生成器
本教程只针对 amd64/x86_64 架构 Linux 内核版本大年夜于等于 2.6.9 的体系。本文将解释若何安装 pandom,这是一个由 ncomputers.org 保护的准时颤抖真随机数生成器。我们老是建议在应用>>>详细阅读
本文标题:RequireJS模块化编程详解
地址:http://www.17bianji.com/lsqh/35293.html
1/2 1