JavaScript模块化研究之 - 闭包实现
前言 - 为什么要闭包
我高度概括几点吧
- 实现面向对象 类
- 代码便于阅读
- 代码之间不会互相污染
- 提高复用性
单例闭包
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 声明
var myobjectModel = new Object({
num : 0,
add : function() {
myobjectModel.num ++;
},
get : function() {
return myobjectModel.num;
}
});
// 调用
myobjectModel.add();
myobjectModel.add();
myobjectModel.add();
var val = myobjectModel.get();
输出:
3
直接对象访问 无需 new , 特别适合功能对象函数
非单例闭包
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 声明
var myobjectModel = function () {
var instance = new Object();
instance.num = 0;
instance.add = function () {
instance.num ++;
};
instance.get = function () {
return instance.num;
};
return instance;
};
// 调用
var my1 = new myobjectModel();
my1.add();
my1.add();
var val1 = my1.get();
log(val1);
var my2 = new myobjectModel();
my2.add();
my2.add();
var val2 = my2.get();
log(val2);
输出:
2 2
对象被new后,互不影响。 适合可复用组件封装。
如果想内部对象私有化
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 声明
var myobjectModel = function () {
var instance = new Object();
instance.num = 0;
instance.add = function () {
instance.num ++;
};
instance.get = function () {
return instance.num;
};
return {
add : instance.add,
get : instance.get
};
};
运行时:
如果需要其它模块支持
代码:
1
2
3
4
5
var myModule = (function(mod){
...
})(otherModule);
对象作为
传入
1 参数
如果各种原因模块没有载入成功
代码:
1
2
3
4
5
var myModule = (function(mod){
...
})(otherModule || {});
默认一个
进去
1 空对象
参考代码
https://github.com/hans007/JavaScriptCodes/tree/master/JS%E9%97%AD%E5%8C%85