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 相关文章推荐
Javascript this关键字使用分析
Oct 21 Javascript
Extjs入门之动态加载树代码
Apr 09 Javascript
Array的push与unshift方法性能比较分析
Mar 05 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
Jan 02 Javascript
KnockoutJs快速入门教程
May 16 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
JQuery实现定时刷新功能代码
May 09 jQuery
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
vue登录路由验证的实现
Dec 13 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
Jan 15 Javascript
关于JavaScript 中 if包含逗号表达式
Nov 27 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
图书管理程序(一)
2006/10/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
浅谈php扩展imagick
2014/06/02 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
PHP微信支付开发实例
2016/06/22 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
细说webpack6 Babel的使用详解
2019/09/26 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
使用pandas读取文件的实现
2019/07/31 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
学习自我鉴定
2014/02/01 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
财务会计专业自荐书
2014/06/30 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers