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 setTimeout()传递函数参数(包括传递对象参数)
Apr 07 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
红米手机抢购的js代码
Mar 10 Javascript
jquery实现更改表格行顺序示例
Apr 30 Javascript
javascript中parseInt()函数的定义和用法分析
Dec 20 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
AngularJS入门教程之静态模板详解
Aug 18 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 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将向Java靠拢
2006/10/09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
Python中bisect的用法
2014/09/23 Python
Python contextlib模块使用示例
2015/02/18 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
为什么python比较流行
2020/06/19 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
Python用Jira库来操作Jira
2020/12/28 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
留学自荐信写作方法
2014/01/27 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
后天观后感
2015/06/08 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
详解Laravel服务容器的优势
2021/05/29 PHP
A22国内电台短波广播频率表
2022/05/10 无线电
python单向链表实例详解
2022/05/25 Python
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL