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或css文件后面跟参数的原因说明
Jan 09 Javascript
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
Apr 29 Javascript
详解React的回调渲染模式
Sep 10 Javascript
JavaScript 闭包的使用场景
Sep 17 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
一个PHP并发访问实例代码
2012/09/06 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
在父页面调用子页面的JS方法
2013/09/29 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
跟老齐学Python之用Python计算
2014/09/12 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python使用pymysql小技巧
2017/06/04 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Python subprocess库的使用详解
2018/10/26 Python
python线程中的同步问题及解决方法
2019/08/29 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
安全责任书范文
2014/03/12 职场文书
个人租房协议书
2014/04/09 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
少年犯观后感
2015/06/11 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis
Python OpenCV之常用滤波器使用详解
2022/04/07 Python