javascript简单实现命名空间效果


Posted in Javascript onMarch 06, 2014

Javascript原生并不支持命名空间,需要变通来实现。

在我们创建一个JavaScript库时,命名空间就显得举足轻重了,我们可以将组成这个JavaScript库的零散的JavaScript文件(*.js)封装在命名空间中,而无须定义全局的函数或类。比如在本章节多次出现的Person,我们就可以作为库的一部分封装到合适的命名空间中:

Code 5-13:

var com = {};
com.anyjava = {};
com.anyjava.Person = function(name) {
    //私有成员
    var _name = name;     //访问器
    this.getName = function() {
        return _name;
    };
    this.setName = function(name) {
        _name = name;
    };
};
//原型
com.anyjava.Person.prototype = {
    eat:function() {
        alert(this.getName() + " is eating something.");
    },
    sleep:function() {
        alert(this.getName() + " is sleeping.");
    },
    walk:function() {
        alert(this.getName() + " is walking.");
    }
};
var dirk = new com.anyjava.Person("Dirk");
dirk.eat();

从Code 5-13中,我们得到了一个比较符合Java开发人员习惯的命名空间,而且在实例化Person对象时,也要指定我们的命令空间路径。

这里说一个小技巧,如果你正在使用一个别人开发好的,且带有比较完整的命名空间规划的JavaScript库时,可能你会对每次都写冗长的命名空间赶到厌倦。比如说您正在使用我开发的JavaScript库,在com.anyjava.control.ui命名空间下,有很多您要用到的扩展UI控件,我估计您也不希望要书写很多次的var xxx = new com.anyjava.control.ui.XXX()。通过指定命名空间别名的方式,我们可以书写更少的重复代码,如Code 5-14所示的另一种实例化Code 5-13中Person的方法:

Code 5-14:

var ns = com.anyjava;
var dirk = new ns.Person("Dirk");
dirk.eat();

最后我将要说明的是,使用命名空间时,需要注意的一个问题。在书写JavaScript库时,大多数情况下命名空间声明语句可能会同时出现在一个JavaScript文件的多个位置,或者是出现多个JavaScript文件中,但是JavaScript语言特性是最后声明的变量会覆盖前边声明的同名变量,这就需要我们注意重复声明的问题,也就是说每次声明命名空间对象时,建议先判断下这个命名空间对象是否已经存在,如Code 5-15所示:

Code 5-15:

if (typeof com.anyjava == "undefined") var com.anyjava = {};

这样我们就能保证“com.anyjava”对象只声明一次了。
Javascript 相关文章推荐
Javascript-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
微信小程序  checkbox组件详解及简单实例
Jan 10 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
解决vue项目nginx部署到非根目录下刷新空白的问题
Sep 27 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 #Javascript
javascript模拟枚举的简单实例
Mar 06 #Javascript
js模拟C#中List的简单实例
Mar 06 #Javascript
js模拟hashtable的简单实例
Mar 06 #Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 #Javascript
用JS在浏览器中创建下载文件
Mar 05 #Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 #Javascript
You might like
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
JS性能优化笔记搜索整理
2013/08/21 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
什么是Python中的匿名函数
2020/06/02 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
迅雷Cued工作心得体会
2014/01/27 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android