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 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
javascript实现动态CSS换肤技术的脚本
Jun 29 Javascript
写出更好的JavaScript程序之undefined篇(中)
Nov 23 Javascript
javascript中xml操作实现代码
Nov 21 Javascript
javascript 回调函数详解
Nov 11 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
AngularJS实现元素显示和隐藏的几个案例
Dec 09 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
详解vue项目构建与实战
Jun 27 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
微信小程序停止其他视频播放当前视频的实例代码
Dec 25 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP 身份证号验证函数
2009/05/07 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php集成动态口令认证
2016/07/21 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
PHP CURL使用详解
2019/03/21 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
高效使用Python字典的清单
2018/04/04 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
什么是会话Bean
2015/05/14 面试题
2014年银行员工工作总结
2014/11/12 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
Python利用capstone实现反汇编
2022/04/06 Python