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 EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
JavaScript eval() 函数介绍及应用示例
Jul 29 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
理解javascript中的闭包
Jan 11 Javascript
ajax的分页查询示例(不刷新页面)
Jan 11 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
Oct 12 Javascript
webpack打包并将文件加载到指定的位置方法
Feb 22 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
详解使用Next.js构建服务端渲染应用
Jul 10 Javascript
JS简单数组排序操作示例【sort方法】
May 17 Javascript
在Vue项目中,防止页面被缩放和放大示例
Oct 28 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快速导入大量数据的实例方法
2019/09/23 PHP
ECMAScript 基础知识
2007/06/29 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
ExtJS 入门
2010/10/29 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python识别验证码图片实例详解
2020/02/17 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
给校长的建议书300字
2014/05/16 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
个人年终总结范文
2015/03/09 职场文书
销售会议开幕词
2016/03/04 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL