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 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
Feb 11 Javascript
jquery常用操作小结
Jul 21 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
手机端转换rem适应
Apr 01 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
微信小程序实现图片上传
May 23 Javascript
jquery使用echarts实现有向图可视化功能示例
Nov 25 jQuery
vue 项目软键盘回车触发搜索事件
Sep 09 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
深入剖析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中处理模拟rewrite 效果
2006/12/09 PHP
php存储过程调用实例代码
2013/02/03 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python调用fortran模块
2016/04/08 Python
python去掉空白行的多种实现代码
2018/03/19 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
质检员岗位职责
2015/02/03 职场文书
学生通报表扬范文
2015/05/04 职场文书
钢琴师观后感
2015/06/12 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
MySQL数据库事务的四大特性
2022/04/20 MySQL