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报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
jquery得到iframe src属性值的方法
Sep 25 Javascript
javascript实现类似百度分享功能的方法
Jul 27 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
轮播图组件js代码
Aug 08 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
浅谈Node.js 中间件模式
Jun 12 Javascript
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
动态生成gif格式的图像要注意?
2006/10/09 PHP
php session 错误
2009/05/21 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
JavaScript生成简单等差数列
2017/11/28 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
Python快速从注释生成文档的方法
2016/12/26 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python中一行和多行import模块问题
2018/04/01 Python
python如何实现异步调用函数执行
2019/07/08 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
自我鉴定书
2014/03/24 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
商品陈列协议书
2014/09/29 职场文书
门面房租房协议书
2014/12/01 职场文书
师德承诺书2015
2015/04/28 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书