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 相关文章推荐
js验证表单第二部分
Nov 25 Javascript
Extjs 几个方法的讨论
Jan 28 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
Feb 15 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
再谈Jquery Ajax方法传递到action(补充)
May 12 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
Mar 09 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
vue实现个人信息查看和密码修改功能
May 06 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
浅谈python之新式类
2018/08/12 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python实现图片中文字分割效果
2019/07/22 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
中英文自我评价常用句型
2013/12/19 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
理财学专业自荐书
2014/06/28 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android