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 相关文章推荐
jQuery的12招常用技巧分享
Aug 08 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 Javascript
利用json获取字符出现次数的代码
Mar 22 Javascript
jQuery cdn使用介绍
May 08 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
Node.js文件操作详解
Aug 16 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
详解vue+css3做交互特效的方法
Nov 20 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
Aug 20 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 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
PHPUnit安装及使用示例
2014/10/29 PHP
php简单的上传类分享
2016/05/15 PHP
php中的异常和错误浅析
2017/05/03 PHP
js停止输出代码
2008/07/20 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python实现定时播放mp3
2015/03/29 Python
python threading模块操作多线程介绍
2015/04/08 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
新学期开学寄语
2014/01/18 职场文书
幸福来敲门观后感
2015/06/04 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
python如何获取网络数据
2021/04/11 Python
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis