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随机排序(随即出牌)
Sep 17 Javascript
js 可拖动列表实现代码
Dec 13 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
Apr 01 Javascript
javascript实现文字无缝滚动
Dec 27 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
bootstrap-Treeview实现级联勾选
Nov 23 Javascript
深入理解react 组件类型及使用场景
Mar 07 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 Javascript
使用vue打包进行云服务器上传的问题
Mar 02 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
wordpress之wp-settings.php
2007/08/17 PHP
PHP中PDO的错误处理
2011/09/04 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
python 七种邮件内容发送方法实例
2014/04/22 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python 复平面绘图实例
2019/11/21 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Python分类测试代码实例汇总
2020/07/23 Python
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
仓库主管的岗位职责
2013/12/04 职场文书
继承公证书样本
2014/04/04 职场文书
授权委托书怎么写
2014/09/25 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android