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 相关文章推荐
jquery text,radio,checkbox,select操作实现代码
Jul 09 Javascript
jQuery取消ajax请求的方法
Jun 09 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
node.js使用redis储存session的方法
Sep 26 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
Node.js 实现远程桌面监控的方法步骤
Jul 02 Javascript
vue 自定义右键样式的实例代码
Nov 06 Javascript
JS错误处理与调试操作实例分析
Apr 13 Javascript
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 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
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
对python 调用类属性的方法详解
2019/07/02 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
医科大学生毕业的自我评价分享
2013/11/12 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
读书小明星事迹材料
2014/05/03 职场文书
企业活动策划方案
2014/06/02 职场文书
2015年公务员工作总结
2015/04/24 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书