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的动态添加控件并取值的实现代码
Sep 24 Javascript
浅谈Javascript面向对象编程
Nov 15 Javascript
ajax异步刷新实现更新数据库
Dec 03 Javascript
jquery队列函数用法实例
Dec 16 Javascript
JS实现简单路由器功能的方法
May 27 Javascript
jQuery+Ajax实现无刷新操作
Jan 04 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
bootstrap fileinput 插件使用项目总结(经验)
Feb 22 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
js获取图片的base64编码并压缩
Dec 05 Javascript
JS实现鼠标移动拖尾
Dec 27 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
python中温度单位转换的实例方法
2020/12/27 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
什么是Web Service?
2012/07/25 面试题
程序员跳槽必看面试题总结
2013/06/28 面试题
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android