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 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
一个简易的js图片轮播效果
Jul 22 Javascript
基于复选框demo(分享)
Sep 27 Javascript
详解ES6通过WeakMap解决内存泄漏问题
Mar 09 Javascript
js实现京东秒杀倒计时功能
Jan 21 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 Javascript
vue 递归组件的简单使用示例
Jan 14 Vue.js
深入剖析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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
用PHP发电子邮件
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
php页面防重复提交方法总结
2013/11/25 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
js和jquery中获取非行间样式
2017/05/05 jQuery
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Flask之flask-script模块使用
2018/07/26 Python
python自动发微信监控报警
2019/09/06 Python
python字符串格式化方式解析
2019/10/19 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python enumerate内置库用法解析
2020/02/24 Python
Python安装OpenCV的示例代码
2020/03/05 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
解除同居协议书
2015/01/29 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书