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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
javasctipt如何显示几分钟前、几天前等
Apr 30 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
Oct 08 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
详解vue express启动数据服务
Jul 05 Javascript
Vue-cli创建项目从单页面到多页面的方法
Sep 20 Javascript
Vue2.0用户权限控制解决方案
Nov 29 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
JS三级联动代码格式实例详解
Dec 30 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python数据结构之Array用法实例
2014/10/09 Python
python实现2048小游戏
2015/03/30 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python正则捕获操作示例
2017/08/19 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Python爬取成语接龙类网站
2018/10/19 Python
python实现定时发送qq消息
2019/01/18 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
民主生活会批评与自我批评总结
2014/10/17 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript