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 相关文章推荐
GreyBox技术总结(转)
Nov 23 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
Feb 11 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 30 Javascript
uniapp实现横向滚动选择日期
Oct 21 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
小程序调用微信支付的方法
2019/09/26 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
jquery实现广告上下滚动效果
2021/03/04 jQuery
分析python切片原理和方法
2017/12/19 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
python挖矿算力测试程序详解
2019/07/03 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python实现最短路径的实例方法
2020/07/19 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
学生请假条格式
2014/04/11 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
公司表扬稿范文
2015/05/05 职场文书
在校学生证明格式
2015/06/24 职场文书
业务员管理制度范本
2015/08/06 职场文书