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的trigger和triggerHandler的区别示例介绍
Apr 20 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
jquery 校验中国身份证号码实例详解
Apr 11 jQuery
vue之浏览器存储方法封装实例
Mar 15 Javascript
详解创建自定义的Angular Schematics
Jun 06 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
js实现可拖动DIV的方法
2013/12/17 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
vue引入swiper插件的使用实例
2017/07/19 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python 专题一 函数的基础知识
2017/03/16 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
Python如何获取文件路径/目录
2020/09/22 Python
英国著名药妆店:Superdrug
2021/02/13 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
幼儿园家长评语
2014/02/10 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
关于幸福的感言
2015/08/03 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
如何Tomcat中使用ipv6地址
2022/05/06 Servers