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 相关文章推荐
JavaScript获得页面base标签中url的方法
Apr 03 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
Jun 12 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
Vue异步加载about组件
Oct 31 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
微信小程序 搜索框组件代码实例
Sep 06 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
vue2路由基本用法实例分析
Mar 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python中map的基本用法示例
2018/09/10 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python 异步async库的使用说明
2020/05/04 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
车间组长岗位职责
2013/12/20 职场文书
大学生工作自荐书
2014/06/16 职场文书
机械专业求职信范文
2014/07/15 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
导游词之峨眉山
2019/12/16 职场文书
golang连接MySQl使用sqlx库
2022/04/14 Golang