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 相关文章推荐
修改file按钮的默认样式实现代码
Apr 23 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
Jul 07 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
表单元素值获取方式js及java方式的简单实例
Oct 15 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
May 09 jQuery
详解node.js的http模块实例演示
Jul 12 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
javascript实现页面的实时时钟显示示例
Aug 06 Javascript
JavaScript高级程序设计之基本引用类型
Nov 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
javascript的函数
2007/01/31 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
Python设计模式之观察者模式简单示例
2018/01/10 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
numpy.where() 用法详解
2019/05/27 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
使用python绘制二维图形示例
2019/11/22 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
如何利用find命令查找文件
2015/02/07 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
大学生评语大全
2014/04/18 职场文书
超越自我演讲稿
2014/05/21 职场文书
团干部培训方案
2014/06/03 职场文书
2016公司年会主持词
2015/07/01 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
MySQL的存储过程和相关函数
2022/04/26 MySQL