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 遍历验证所有文本框的值
Aug 27 Javascript
javascript 函数参数限制说明
Nov 19 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
JQuery获取表格数据示例代码
May 26 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 Javascript
js操作二进制数据方法
Mar 03 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 Javascript
Echarts.js无法引入问题解决方案
Oct 30 Javascript
JS闭包原理及其使用场景解析
Dec 03 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
php与js的区别是什么
2013/08/05 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python中Continue语句的用法的举例详解
2015/05/14 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
简单了解python PEP的一些知识
2019/07/13 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
淘宝客服自我总结鉴定
2014/01/25 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
python基础之//、/与%的区别详解
2022/06/10 Python