Skip to content

Commit 0e7bb8e

Browse files
committed
添加 js 变量管理插件
1 parent ecd8cec commit 0e7bb8e

File tree

9 files changed

+163
-76
lines changed

9 files changed

+163
-76
lines changed

JsNameSpaceManage/README.md

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1-
### JavaScript 命名空间管理 Demo
1+
## JavaScript 命名空间管理 Demo
22

33
----
4+
### JavaScript 作用域
5+
6+
因为 JavaScript 的弱语言的特性。只有`function`是唯一具有块级作用域的标识符。
7+
所以在平时的开发过程中对变量名的管理和对引入的第三方插件的管理,就成为了一个非常重要的工作。
8+
9+
正因为这个原因,催生出了`AMD 规范``CMD 规范`,和一些库文件比如:`require.js`等;
10+
11+
12+
**这里的这里的 demo 文件主要是通过对象的方式来管理 JavaScript 变量的作用域。
13+
**
14+
15+
代码运行结束以后,我们可以发现,将位于不同目录下的 js 文件 中包含的方法,管理在一个 js 对象中。
16+
17+
![执行结果](http://ww2.sinaimg.cn/large/698e22a9jw1f2dlm5pqlvj20ku09sgn6.jpg)
18+
19+
20+
21+
html 文件中这些单独引入的 js文件可以通过使用前端构建工具合并成一个 js 文件。这个 demo 仅仅是用于演示。
22+
23+
![js 文件列表](http://ww2.sinaimg.cn/large/698e22a9jw1f2dlmhovmfj20fg049q44.jpg)

JsNameSpaceManage/demo/js/comfirm.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
JSManage.loadPlugin('js.confirm',function($){
2+
3+
return function(content,conf){
4+
5+
var that ={};
6+
var con=confirm('这个是 confirm 对象');
7+
if(con){
8+
9+
}
10+
11+
return that;
12+
};
13+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
JSManage.loadPlugin('js.dir1.dir2.alert',function($){
2+
3+
return function(content,conf){
4+
5+
var that ={};
6+
//TODO
7+
8+
alert('我是 alert对象');
9+
10+
return that;
11+
};
12+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
JSManage.loadPlugin('js.dir1.dir2.alert2',function($){
2+
3+
return function(content,conf){
4+
5+
var that ={};
6+
alert('我是 alert2 对象');
7+
8+
return that;
9+
};
10+
});

JsNameSpaceManage/demo/test.html

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
<!DOCTYPE html>
2-
<html >
2+
<html>
3+
34
<head>
45
<meta charset="UTF-8">
56
<title>测试</title>
67
</head>
8+
79
<body>
8-
<script src="js/comfirm.js"></script>
9-
<script src="../js/manage.js"></script>
10+
<script src="../js/JSManage.js"></script>
11+
<script src="js/comfirm.js"></script>
12+
<script src="js/dir1/dir2/alert.js"></script>
13+
<script src="js/dir1/dir2/alert2.js"></script>
1014
</body>
15+
1116
</html>

JsNameSpaceManage/js/JSManage.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
2+
/**
3+
* [管理 JavaScript 中变量的作用域]
4+
* @param {[type]} function( [description]
5+
* @return {[type]} [description]
6+
*/
7+
var JSManage = (function() {
8+
var that = {};
9+
var errorList = [];
10+
11+
/**
12+
* [function 挂载其它目录下的 js 文件]
13+
* @param {[type]} ns [目录结构]
14+
* @param {[type]} maker [插件的回掉函数]
15+
* @return {[type]} [description]
16+
*/
17+
that.loadPlugin = function(ns, maker) {
18+
var NSList = ns.split('.');
19+
var step = that;
20+
var k = null;
21+
while (k = NSList.shift()) {
22+
if (NSList.length) {
23+
if (step[k] === undefined) {
24+
step[k] = {};
25+
}
26+
//这里相当于将 step 又指向了
27+
step = step[k];
28+
} else {
29+
if (step[k] === undefined) {
30+
try {
31+
step[k] = maker(that);
32+
} catch (exp) {
33+
errorList.push(exp);
34+
}
35+
}
36+
}
37+
}
38+
};
39+
40+
/**
41+
* [function 编写插件过程中让默认参数和自定义参数合并]
42+
* @param {[type]} oSource [默认插件的参数]
43+
* @param {[type]} oParams [自定义配置参数]
44+
* @param {[type]} isown [是否复制默认参数原型链上的属性和值]
45+
* @return {[type]} [description]
46+
*/
47+
that.parseParam=function(oSource, oParams, isown){
48+
var key, obj = {};
49+
oParams = oParams || {};
50+
for (key in oSource) {
51+
obj[key] = oSource[key];
52+
if (oParams[key] != null) {
53+
//如果为 true 仅仅复制自身,不复制原型链
54+
if (isown) {
55+
if (oSource.hasOwnProperty[key]) {
56+
obj[key] = oParams[key];
57+
}
58+
}
59+
else {
60+
obj[key] = oParams[key];
61+
}
62+
}
63+
}
64+
return obj;
65+
};
66+
67+
return that;
68+
})();

JsNameSpaceManage/js/alert.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
JSManage.loadPlugin('js.alert',function($){
2+
//插件的 html 模板
3+
var TPL = '<div class="plugin">'
4+
+ '<span>我是模板的内容</span>'
5+
+ '<a>确定</a>'
6+
+ '</div>';
7+
8+
/**
9+
* [function 插件的操作方法]
10+
* @param {[type]} content [插件将要显示的内容]
11+
* @param {[type]} conf [插件自定义配置]
12+
* @return {[type]} [description]
13+
*/
14+
return function(content,conf){
15+
conf = $.parseParam({
16+
ok : function(){}, //点击 ok 后 执行的回掉函数
17+
title : '提示',
18+
content : content || '',
19+
okTxt : '确定'
20+
}, conf);
21+
22+
var that ={};
23+
//TODO
24+
//这里可以根据参数操作 html 模板
25+
// var render = $T.compile(TPL);
26+
// var html = render(conf);
27+
28+
29+
return that;
30+
};
31+
});

JsNameSpaceManage/js/manage.js

-30
This file was deleted.

JsNameSpaceManage/js/other.js

-42
This file was deleted.

0 commit comments

Comments
 (0)