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 相关文章推荐
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
jquery将一个表单序列化为一个对象的方法
Dec 02 Javascript
关于onchange事件在IE和FF下的表现及解决方法
Mar 08 Javascript
javascript中Object使用详解
Jan 26 Javascript
js点击文本框后才加载验证码实例代码
Oct 20 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
JS实现的简单标签点击切换功能示例
Sep 21 Javascript
JS异步函数队列功能实例分析
Nov 28 Javascript
Vue中插入HTML代码的方法
Sep 21 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 Javascript
微信小程序 如何获取网络状态
Jul 26 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与SQL注入攻击[一]
2007/04/17 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
Python实现某论坛自动签到功能
2019/08/20 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
使用索引有什么好处
2016/07/27 面试题
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
酒店前厅员工辞职信
2014/01/08 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技