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 相关文章推荐
prototype Element学习笔记(篇二)
Oct 26 Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
js对象数组按属性快速排序
Jan 31 Javascript
js substr、substring和slice使用说明小记
Sep 15 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
jQuery插件Tmpl的简单使用方法
Apr 27 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
May 28 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
新版PHP极大的增强功能和性能
2006/10/09 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
在模板页面的js使用办法
2010/04/01 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
jQuery设计思想
2017/03/07 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
Python退火算法在高次方程的应用
2018/07/26 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
Windows和Linux动态库应用异同
2016/04/17 面试题
销售文员的岗位职责
2013/11/20 职场文书
施工人员岗位职责
2013/12/12 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
中学生校园广播稿
2014/01/16 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
小英雄雨来观后感
2015/06/09 职场文书
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js