Javascript 面向对象 命名空间


Posted in Javascript onMay 13, 2010

javascript中本没有命名空间的概念,但是要体现面向对象的思想,

应当有命名空间,就像java中的package,.net中的namespace一样,

作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。
最简单创建命名空间的方法:

var java = {}; 
java.util = {}; 
//这样就创建成功了命名空间:java.util 
//我们可以在java.util下面加类(函数),属性,或对象 
java.util.HashMap = function() 
{ 
this.ShowMessage = function() 
{ 
alert("java.util.HashMap"); 
} 
} 
var map = new java.util.HashMap(); 
alert(map.ShowMessage()); //显示结果:java.util.HashMap 
//封装创建命名空间的方法: 
//定义一个对象,js中用{}花括号定义对象,等同于 var JsObject = new Object(); 
var JsObject = {}; 
JsObject.namespace = function() //在JsObject对象下定义一个函数namespace 
{ 
 /*下面代码中arguments为函数传入的参数,在function未明确定义参数时, 

function也可以传入参数,并用arguments来 接收,arguments类似数组, 

如果传入多个参数,将按顺序保存,取值法:arguments[0],arguments[1]....*/ 
var a = arguments,o = null,d,rt; 
for(var i = 0; i < a.length; i++) 
{ 
d = a[i].split('.'); //将传入的参数用符号'.' 进行分割,并放入d数组中。 
rt = d[0]; 
//判断数组中的第一个值是否未定义,如果未定义,便定义为空对象{},并赋值给变量o 
eval('if (typeof ' + rt + ' == "undefined"){' 



+ rt + ' = {};} o = ' + rt + ';'); 

for(var j = 1; j < d.length; j++) 

{ 


/*循环遍历数组d每个值作为key,加入到对象o中,如果key在o中存在,则取o中值,若 


不存在,则赋值为空对象{} */ 
 


o[d[j]] = o[d[j]] || {}; 

  o = o[d[j]]; 

} 
} 
} 
JsObject.namespace("org.myJs"); //申明命名空间:org.myJs 
org.myJs.Student = function() //在命名空间org.myJs下定义类Student 
{ 


//定义类Student中的变量,并赋予初值,但此变量的访问权限是public 
this.studentNo = 's001'; 
this.studentName = '小明'; 
this.sex = '男'; 
} 
var s = new org.myJs.Student(); //创建Student类的对象 
alert('学号:'+s.studentNo); 
alert('姓名:'+s.studentName); 
alert('性别:'+s.sex);

效果和第一篇 (一)javascript经验总结面向对象—类 结果一样
Javascript 相关文章推荐
IE中jscript/javascript的条件编译
Sep 07 Javascript
javascript vvorld 在线加密破解方法
Nov 13 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
Apr 13 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
Vue原理剖析 实现双向绑定MVVM
May 03 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
vue项目中自定义video视频控制条的实现代码
Apr 26 Javascript
javascript 面向对象 function类
May 13 #Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 #Javascript
Javascript 面向对象 继承
May 13 #Javascript
Javascript 面向对象 重载
May 13 #Javascript
JavaScript 面向对象的 私有成员和公开成员
May 13 #Javascript
限制文本框输入N个字符的js代码
May 13 #Javascript
javascript preload&amp;lazy load
May 13 #Javascript
You might like
第七节 类的静态成员 [7]
2006/10/09 PHP
一个显示天气预报的程序
2006/10/09 PHP
杏林同学录(三)
2006/10/09 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Python中文字符串截取问题
2015/06/15 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python多进程并发demo实例解析
2019/12/13 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
总经理职责
2013/12/22 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL