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.findElementById()使用介绍
Sep 21 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
node.js中的fs.readFile方法使用说明
Dec 15 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
May 18 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
基于JQuery的购物车添加删除以及结算功能示例
Mar 08 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
Angular 数据请求的实现方法
May 07 Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 Javascript
详解JavaScript中的this指向问题
Feb 05 Javascript
element tree树形组件回显数据问题解决
Aug 14 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数字游戏 计算24算法
2012/06/10 PHP
三种php连接access数据库方法
2013/11/11 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
Javascript 二维数组
2009/11/26 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
vue better-scroll插件使用详解
2018/01/25 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
零基础小白多久能学会python
2020/06/22 Python
五种Python转义表示法
2020/11/27 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
物业保洁员管理制度
2015/08/05 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang