JavaScript 编程引入命名空间的方法与代码


Posted in Javascript onAugust 13, 2007

JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定义。函数名很容易发生冲突,特别是引入多个js文件时,冲突的情况尤为明显。因此也就有引入命名空间的必要。
Javascript 本身没有命名空间的概念,需要用对象模拟出来。
比如定义一个命名空间的类,用于创建命名空间:

function NameSpace(){
}

这是一个构造函数,但却不做任何事情,再来下面和评论有关的代码:

var comment = new NameSpace();
comment.list = function(){/*code...*/};
comment.counter = 0;

第一行创建所谓命名空间(其实就是一个空白对象),名为comment,第二、三行定义该空间下的两个方法。调用时可以使用 comment.list() 或者 comment.counter++ 等;
再创建子命名空间:

comment.add = new NameSpace();
comment.add.post = function(){/*code...*/}
comment.add.check = function(){}

之所以引入命名空间的概念,是为了避免函数名相同的问题。上面的过程也可以这样定义:

var comment = {
 list : function(){/*code...*/},
 add  : {
  post  :  function(){/*code...*/},
  check :  function(){/*code...*/}
 }
}

prototype.js 里面就大量使用这种方式,虽然这种方式更直观地像一棵树,但只要节点稍多一些,眼睛就忙于寻找这些节点的关系,命名空间的做法是横向地描述这种关系树,层次关系直接表现在字面上,两种方式效果一致,但书写风格却各有特点。

再扩展一个方法:

NameSpace.prototype.appendChild = function(ns){
for (var key in ns){
this[key] = ns[key];
}
return this;
}
NameSpace.prototype.copyChild = NameSpace.prototype.appendChild;

Javascript 相关文章推荐
javascript定时变换图片实例代码
Mar 17 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
Apr 07 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
js+html5实现canvas绘制椭圆形图案的方法
May 21 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 Javascript
如何解决vue在ios微信"复制链接"功能问题
Mar 26 Javascript
详细分析vue表单数据的绑定
Jul 20 Javascript
详解webpack的文件监听实现(热更新)
Sep 11 Javascript
权威JavaScript 中的内存泄露模式
Aug 13 #Javascript
封装好的省市地区联动控件附下载
Aug 13 #Javascript
分享别人写的一个小型js框架
Aug 13 #Javascript
javascript下查找父节点的简单方法
Aug 13 #Javascript
根据地区不同显示时间的javascript代码
Aug 13 #Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 #Javascript
Track Image Loading效果代码分析
Aug 13 #Javascript
You might like
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
Bootstrap表单布局
2016/07/19 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
Node 代理访问的实现
2019/09/19 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python实现扫雷小游戏
2020/04/24 Python
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
大学生简历中个人的自我评价
2013/10/06 职场文书
产品销售员岗位职责
2013/12/18 职场文书
办理退休介绍信
2014/01/09 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
高中军训感言500字
2014/02/24 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
聘任通知书
2015/09/21 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js