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 相关文章推荐
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
Aug 28 Javascript
JavaScript DOM 学习第五章 表单简介
Feb 19 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
laravel实现中文和英语互相切换的例子
Sep 30 Javascript
AutoJs实现刷宝短视频的思路详解
May 22 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
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
Python中装饰器的一个妙用
2015/02/08 Python
python去除所有html标签的方法
2015/05/05 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python实现图片文件批量重命名
2020/03/23 Python
Python for循环生成列表的实例
2018/06/15 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
酒店总经理助理岗位职责
2014/02/01 职场文书
二手房买卖协议书
2014/04/10 职场文书
团支部建设方案
2014/05/02 职场文书
初中同学会活动方案
2014/08/22 职场文书
导游词之桂林
2019/08/20 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android