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+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
Jun 18 Javascript
js模仿html5 placeholder适应于不支持的浏览器
Jan 13 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
Vue代码整洁之去重方法整理
Aug 06 Javascript
JavaScript判断数据类型有几种方法及区别介绍
Sep 02 Javascript
vue+springboot实现登录验证码
May 27 Vue.js
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
Email+URL的判断和自动转换函数
2006/10/09 PHP
php中Smarty模板初体验
2011/08/08 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
PHP实现小偷程序实例
2016/10/31 PHP
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
python 动态加载的实现方法
2017/12/22 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
django最快程序开发流程详解
2019/07/19 Python
详解Python3 pickle模块用法
2019/09/16 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
汽车销售员工作总结
2015/08/12 职场文书
年终工作总结范文
2019/06/20 职场文书