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 相关文章推荐
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
JavaScript中的new的使用方法与注意事项
May 16 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
简单理解js的冒泡排序
Dec 19 Javascript
react-native android状态栏的实现
Jun 15 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 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安全技术之 实现php基本安全
2010/09/04 PHP
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Python做简单的字符串匹配详解
2017/03/21 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python使用Matplotlib画条形图
2020/03/25 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
基于python代码批量处理图片resize
2020/06/04 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
全球性的女装店:storets
2019/06/12 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
毕业生自荐信
2013/12/14 职场文书
中学生爱国演讲稿
2013/12/31 职场文书
九年级物理教学反思
2014/01/29 职场文书
团日活动总结范文
2014/04/25 职场文书
服务标兵事迹材料
2014/05/04 职场文书
一体化教学实施方案
2014/05/10 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Golang 字符串的常见操作
2022/04/19 Golang