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 相关文章推荐
Prototype中dom对象方法汇总
Sep 17 Javascript
分享XmlHttpRequest调用Webservice的一点心得
Jul 20 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
node.js中的console.dir方法使用说明
Dec 10 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
使用veloticy-ui生成文字动画效果
Feb 08 Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 Javascript
深度解读vue-resize的具体用法
Jul 08 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP crc32()函数讲解
2019/02/14 PHP
JavaScript延迟加载
2021/03/09 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python实现控制台进度条功能
2016/01/04 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
工商管理毕业生推荐信
2013/12/24 职场文书
离职感谢信
2015/01/21 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers