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 相关文章推荐
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
再谈javascript面向对象编程
Mar 18 Javascript
js网页版计算器的简单实现
Jul 02 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
JavaScript正则表达式和级联效果
Sep 14 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
如何利用js在两个html窗口间通信
Apr 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
js+css在交互上的应用
2010/07/18 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
浅谈python中的数字类型与处理工具
2017/08/02 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python实现简单颜色识别程序
2020/02/19 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
python调用win32接口进行截图的示例
2020/11/11 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
中学生自我评价范文
2014/02/08 职场文书
村庄环境整治方案
2014/05/15 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2015年工程部工作总结
2015/04/30 职场文书
刑事法律意见书
2015/06/04 职场文书
班主任培训研修日志
2015/11/13 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫