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高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
多种方法实现JS动态添加事件
Nov 01 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
浅析Vue中拆分视图层代码的5点建议
Aug 15 Javascript
Vue中图片Src使用变量的方法
Oct 30 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 Javascript
js消除图片小游戏代码
Dec 11 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
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
Yii实现简单分页的方法
2016/04/29 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python高效编程技巧
2013/01/07 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python网络应用开发知识点浅析
2019/05/28 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
Python程序慢的重要原因
2020/09/04 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
广州一家公司的.NET面试题
2016/06/11 面试题
如何唤起类中的一个方法
2013/11/29 面试题
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
行政复议决定书
2015/06/24 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android