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和firefox不兼容的解决方法集合
Apr 28 Javascript
js escape,unescape解决中文乱码问题的方法
May 26 Javascript
关于flash遮盖div浮动层的解决方法
Jul 17 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
微信小程序tabbar不显示解决办法
Jun 08 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
May 04 jQuery
基于iview的router常用控制方式
May 30 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
JavaScript 数组去重详解
Sep 15 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的CMS中展示文章类实例分析
2015/06/18 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP文件操作实例总结
2016/09/27 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
vue实现登录拦截
2020/06/29 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python logging模块的使用总结
2019/07/09 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
《池塘边的叫声》教学反思
2014/04/12 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
社区文明倡议书
2015/04/28 职场文书
校车司机安全责任书
2015/05/11 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
教师研修随笔感言
2015/11/18 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python