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 相关文章推荐
js 与或运算符 || && 妙用
Dec 09 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
Javascript writable特性介绍
Feb 27 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
JS代码防止SQL注入的方法(超简单)
Apr 12 Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
vue监听input标签的value值方法
Aug 27 Javascript
原生JS实现手动轮播图效果实例代码
Nov 22 Javascript
今天,小程序正式支持 SVG
Apr 20 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
如何利用http协议发布博客园博文评论
2015/08/03 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
vue构建动态表单的方法示例
2018/09/22 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
21行Python代码实现拼写检查器
2016/01/25 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
神经网络python源码分享
2017/12/15 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
Python列表切片常用操作实例解析
2020/03/10 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python初步实现word2vec操作
2020/06/09 Python
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
关于赌博的检讨书
2014/01/08 职场文书
服务生自我鉴定
2014/01/22 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
在校证明模板
2015/06/17 职场文书
提档介绍信范文
2015/10/22 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python