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 相关文章推荐
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
基于JavaScript实现熔岩灯效果导航菜单
Jan 04 Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 Javascript
VUE2实现事件驱动弹窗示例
Oct 21 Javascript
JavaScript HTML DOM元素 节点操作汇总
Jul 29 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
加速vue组件渲染之性能优化
Apr 09 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
php 常用类整理
2009/12/23 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
node.js基础知识汇总
2020/08/25 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Python实现的简单dns查询功能示例
2017/05/24 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Python下简易的单例模式详解
2019/04/08 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python打造爬虫代理池过程解析
2019/08/15 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server