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 相关文章推荐
在b/s开发中经常用到的javaScript技术
Aug 23 Javascript
javascript编程起步(第二课)
Jan 10 Javascript
javascript中注册和移除事件的4种方式
Mar 20 Javascript
javascript中的绑定与解绑函数应用示例
Jun 24 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
Aug 27 Javascript
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
Vue组件选项props实例详解
Aug 18 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
解决vue刷新页面以后丢失store的数据问题
Aug 11 Javascript
基于JavaScript实现年月日三级联动
Jun 22 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下载远程文件类(支持断点续传)
2008/11/14 PHP
PHP 程序员也要学会使用“异常”
2009/06/16 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
javascript常用的方法分享
2015/07/01 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python开发的HTTP库requests详解
2017/08/29 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
后勤人员岗位职责
2013/12/17 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
信息总监管理职责范本
2014/03/08 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
答谢酒会主持词
2015/07/02 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书