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 相关文章推荐
破除网页鼠标右键被禁用的绝招大全
Dec 27 Javascript
javascript获取元素CSS样式代码示例
Nov 28 Javascript
使用js Math.random()函数生成n到m间的随机数字
Oct 09 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
jQuery ready()和onload的加载耗时分析
Sep 08 Javascript
ES6学习之变量的解构赋值
Feb 12 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 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
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php 使用array函数实现分页
2015/02/13 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Python常用库大全及简要说明
2020/01/17 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python json读写方式和字典相互转化
2020/04/18 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
档案接收函范文
2014/01/10 职场文书
开工仪式主持词
2014/03/20 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers