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 相关文章推荐
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
Javascript window对象详解
Nov 12 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
Nov 06 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
原生JS进行前后端同构
Apr 22 Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 Javascript
js数组的基本使用总结
Jan 18 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
织梦模板标记简介
2007/03/11 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
PHP Cookie学习笔记
2016/08/23 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
tensorboard显示空白的解决
2020/02/15 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
Python扫描端口的实现
2021/01/25 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
中学门卫岗位职责
2013/12/26 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android