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 相关文章推荐
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
js利用与或运算符优先级实现if else条件判断表达式
Apr 15 Javascript
javascripit实现密码强度检测代码分享
Dec 12 Javascript
jquery 实现两级导航菜单附效果图
Mar 07 Javascript
jquery实现带二级菜单的导航示例
Apr 28 Javascript
JavaScript实现的XML与JSON互转功能详解
Feb 16 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
vue-cli 3 全局过滤器的实例代码详解
Jun 03 Javascript
vue+axios实现post文件下载
Sep 25 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
JS制作简易计算器的实例代码
Jul 04 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
关于时间计算的结总
2006/12/06 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
跟老齐学Python之重回函数
2014/10/10 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python实现ID3决策树算法
2018/08/29 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
Python实现弹球小游戏
2020/08/01 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
党员公开承诺书范文
2014/03/25 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
2014国庆节标语口号
2014/09/19 职场文书
股东出资证明书范例
2014/10/04 职场文书
少先队中队工作总结
2015/08/14 职场文书
世界文化遗产导游词
2019/08/07 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书