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 相关文章推荐
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
jQuery实现切换页面布局使用介绍
Oct 09 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
jquery实现手机号码选号的方法
Jul 31 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
Dec 03 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
微信小程序登录数据解密及状态维持实例详解
May 06 Javascript
利用js实现简单开关灯代码
Nov 23 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 COOKIE设置为浏览器进程
2009/06/21 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python 中 Meta Classes详解
2016/02/13 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
树莓派实现移动拍照
2019/06/22 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
渠道运营商合作协议书范本
2014/10/06 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript
table不让td文字溢出操作方法
2022/12/24 HTML / CSS