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代码
Jul 01 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
jQuery点缩略图弹出层显示大图片
Feb 13 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
微信小程序 用户数据解密详细介绍
Jan 09 Javascript
canvas简单快速的实现知乎登录页背景效果
May 08 Javascript
JS回调函数基本定义与用法实例分析
May 24 Javascript
angular4中关于表单的校验示例
Oct 16 Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 Javascript
微信小程序实现录音Record功能
May 09 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
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python装饰器decorator介绍
2014/11/21 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python实现控制COM口的示例
2019/07/03 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
爱耳日活动总结
2014/04/30 职场文书
促销活动计划书
2014/05/02 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
感谢信的格式
2015/01/21 职场文书
垂直极限观后感
2015/06/08 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
Python多线程 Queue 模块常见用法
2021/07/04 Python