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中方便增删改cookie的一个类
Oct 11 Javascript
jQuery之折叠面板的深入解析
Jun 19 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
Sep 21 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
JS数据类型判断的几种常用方法
Jul 07 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缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python实现Const详解
2015/01/27 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python 生成图形验证码的方法示例
2018/11/11 Python
python爬虫超时的处理的实例
2018/12/19 Python
python把1变成01的步骤总结
2019/02/27 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
详解python itertools功能
2020/02/07 Python
python自动下载图片的方法示例
2020/03/25 Python
python中os包的用法
2020/06/01 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
出纳员岗位责任制
2014/02/11 职场文书
辩论赛新闻稿
2015/07/17 职场文书