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插件化开发教程 (三)
Jan 27 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
微信支付 JS API支付接口详解
Jul 11 Javascript
jQuery实现大图轮播
Feb 13 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
详解vue移动端日期选择组件
Feb 22 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
Vue动态获取width的方法
Aug 22 Javascript
在Vue.js中使用TypeScript的方法
Mar 19 Javascript
openLayer4实现动态改变标注图标
Aug 17 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和MySql来与ODBC数据连接
2006/10/09 PHP
数字转英文
2006/12/06 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
document.createElement()用法
2013/03/13 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
秘书专业自荐信范文
2013/12/26 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
项目经理任命书
2014/06/04 职场文书
4s店活动策划方案
2014/08/25 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
国情备忘录观后感
2015/06/04 职场文书
患者身份识别制度
2015/08/06 职场文书
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技
Mysql数据库group by原理详解
2022/07/07 MySQL