javascript 命名空间以提高代码重用性


Posted in Javascript onNovember 13, 2008

当在同一个网页里引入10多个js文件之后,
各js中的同名函数就很容易冲突了。
比如xxx库里写了个addCssStyle方法,
yyy类库里也写了个addCssStyle方法,
而这两个方法的具体实现又有一定差别。
那么同时引用这两个组件的时候,函数冲突之后导致页面效果发生变化,
调试和修改都是非常痛苦的,如果为了避免冲突,
而放弃引用一些优秀的组件,那更是让人郁闷的事情。

为此,在封装javascript组件库的时候,请使用命名空间来避免冲突。
将所有的方法和变量都要按包名类名的方式来写。
(这个时候写代码的感觉和封装java的util方法一样方便,呵呵)
由此,我的js库按如下方式封装。
google了半天,都没现成的,于是自己摸索出来,示例代码如下:
(lizongbo原创!!!)

<script language="JavaScript" type="text/javascript" >
<!-- //初始化命名空间
var jscom = jscom ? jscom : {};
jscom.lizongbo = jscom.lizongbo ? jscom.lizongbo : {};
//第一种封装方法
jscom.lizongbo.util = jscom.lizongbo.util ? jscom.lizongbo.util : {
crtVersion : 'jscom.lizongbo.util version 0.0.1', //注意用逗号隔开
sayHello: function (str){
window.alert('hello : '+str +' by ' + this.getVersion()); //变量引用要加上this
},//注意用逗号隔开
getVersion :function (){
//alert(' jscom.lizongbo.util version ' + this.crtVersion);//变量引用要加上this
return this.crtVersion+' lizongbo';
}//注意不能够有逗号
}
//第二种封装方法
jscom.lizongbo.util2 =function (){};//重点是这行,它保证了下面的with调用
jscom.lizongbo.util2.crtVersion=' jscom.lizongbo.util2 version 0.0.2';
jscom.lizongbo.util2.sayHello = function(str){
with (jscom.lizongbo.util2) {//这里也是重点,不然会找不到getVersion方法。
window.alert('你好 : '+str +' by ' + getVersion());//这种方法不用加this
}
};
jscom.lizongbo.util2.getVersion = function(){
with (jscom.lizongbo.util2) {//这里也是重点,不然会找不到crtVersion变量。
return crtVersion+' lizongbo2';
}
};
var vutil1= jscom.lizongbo.util; //和java的import差不多好用
vutil1.sayHello('lizongbo'); //第一种调用
var vutil2= jscom.lizongbo.util2;
vutil2.sayHello('lizongbo');//第二种调用
//-->
</script>

把上面的代码复制网页里看看效果吧。
对比两种实现方式,现有代码按第二种方式改造最为方便。
再把js文件按命名空间命名,那样操作就更加方便了。
例如
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util1.js"></script>
<script type="text/javascript" src="/commons/scripts/jscom.lizongbo.util2.js"></script>
只要都按此方式编写的库,再也不用担心引入多个js文件之后的函数冲突问题了。

Javascript 相关文章推荐
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
通过实例解析js简易模块加载器
Jun 17 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 Javascript
easyUI 实现的后台分页与前台显示功能示例
Jun 01 Javascript
JavaScript面向对象之体会[总结]
Nov 13 #Javascript
js option删除代码集合
Nov 12 #Javascript
javascript firefox不显示本地预览图片问题的解决方法
Nov 12 #Javascript
javascript显示选择目录对话框的代码
Nov 10 #Javascript
JavaScript XML实现两级级联下拉列表
Nov 10 #Javascript
js wmp操作代码小结(音乐连播功能)
Nov 08 #Javascript
js 目录列举函数
Nov 06 #Javascript
You might like
用PHP实现文件上传二法
2006/10/09 PHP
WAF的正确bypass
2017/01/05 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python 递归函数详解及实例
2016/12/27 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
30年同学聚会感言
2014/01/30 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
先进基层党组织材料
2014/12/25 职场文书
婚礼答谢礼品
2015/01/20 职场文书
中考学习决心书
2015/02/04 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
信息简报范文
2015/07/21 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
php修改word的实例方法
2021/11/17 PHP
Python中time标准库的使用教程
2022/04/13 Python