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 相关文章推荐
js图片自动切换效果处理代码
May 07 Javascript
JSON+HTML实现国家省市联动选择效果
May 18 Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
Vue slot用法(小结)
Oct 22 Javascript
Element UI框架中巧用树选择器的实现
Dec 12 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
Mar 20 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
js根据后缀判断文件文件类型的代码
May 09 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 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)二
2006/10/09 PHP
如何将数据从文本导入到mysql
2006/10/09 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php随机显示图片的简单示例
2014/02/15 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
好家长事迹材料
2014/01/23 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
亮化工程实施方案
2014/03/17 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
python中super()函数的理解与基本使用
2021/08/30 Python
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB