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 相关文章推荐
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
JS编程小常识很有用
Nov 26 Javascript
JS实现商品倒计时实现代码
May 03 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
Mar 29 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
May 26 Javascript
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
Vue基础学习之项目整合及优化
Jun 02 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
main.php
2006/12/09 PHP
php图片缩放实现方法
2014/02/20 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
学习Node.js模块机制
2016/10/17 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python读取mysql数据绘制条形图
2020/03/25 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
python 实现简易的记事本
2020/11/30 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
旅游管理专业个人求职信范文
2013/12/24 职场文书
大一军训感言
2014/01/09 职场文书
请假条标准格式规范
2014/04/10 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
齐云山导游词
2015/02/06 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
详解thinkphp的Auth类认证
2021/05/28 PHP