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 相关文章推荐
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
Nov 23 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
React-router 4 按需加载的实现方式及原理详解
May 25 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 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
对javascript和select部件的结合运用
2006/10/09 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
numpy中的高维数组转置实例
2018/04/17 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python定义一个函数的方法
2020/06/15 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
python regex库实例用法总结
2021/01/03 Python
竞聘演讲稿范文
2014/01/12 职场文书
cf搞笑广告词
2014/03/14 职场文书
《法国号》教学反思
2016/02/22 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript