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是否可实现多线程  深入理解JavaScript定时机制
Dec 22 Javascript
判断客户浏览器是否支持cookie的示例代码
Dec 23 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
javascript获取网页各种高宽及位置的方法总结
Jul 27 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
在vue中使用jointjs的方法
Mar 24 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 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验证码
2015/05/04 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python while true实现爬虫定时任务
2020/06/08 Python
python 实现单例模式的5种方法
2020/09/23 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
卫生系统先进事迹
2014/05/13 职场文书
全国文明单位申报材料
2014/05/31 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
公司出差管理制度范本
2015/08/05 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
python自然语言处理之字典树知识总结
2021/04/25 Python