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 相关文章推荐
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
JavaScript中的this到底是什么(一)
Dec 09 Javascript
将List对象列表转换成JSON格式的类实现方法
Jul 04 Javascript
vue.js学习之递归组件
Dec 13 Javascript
AngularJs表单校验功能实例代码
Feb 09 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
vue 插件的方法代码详解
Jun 06 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
JAVA/JSP学习系列之二
2006/10/09 PHP
mysql总结之explain
2012/02/27 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
javascript jQuery插件练习
2008/12/24 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
python中return不返回值的问题解析
2020/07/22 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
C和C++经典笔试题附答案解析
2014/08/18 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
代理人委托书
2014/09/16 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
Python基础之元编程知识总结
2021/05/23 Python
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Python  lambda匿名函数和三元运算符
2022/04/19 Python