javascript 面向对象,实现namespace,class,继承,重载


Posted in Javascript onOctober 29, 2009

由于组里项目大多的javascript,css等客户端工作是另一同事在负责,该同事又特忙无法重构,老大也就只是提建议并未立即实施重构。但是我前些日子也改过些许客户端的小bug,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水
.定义namespace
Namesapce.js

Namespace = new Object(); 
Namespace.register = function(fullname){ 
try 
{ 
var nsArray = fullname.split("."); 
var strNS = ""; 
var strEval = ""; 
for(var i=0;i<nsArray.length;i++){ 
if(strNS.length >0) 
strNS += "."; 
strNS += nsArray[i]; 
strEval += " if(typeof("+ strNS +") =='undefined') " + strNS + " = new Object(); "; 
} 
if(strEval != "") eval(strEval); 
}catch(e){alert(e.message);} 
}

.Employee.js
Employee.js
//注册命名空间 
Namespace.register("MyCompany"); 
//1.类:雇员 
MyCompany.Employee = function(empName){ 
this.Name = empName; 
this.Salary = 1000; 
this.Position = "cleaner"; 
} 
MyCompany.Employee.prototype.ShowName = function(){ 
return "I'm "+this.Name+",my salary is $" + this.Salary; 
} 
MyCompany.Employee.prototype.Work = function(){ 
return "I'm a "+ this.Position +",I'm cleaning all day!" 
} 
//2.类:程序员 
MyCompany.Developer = function(empName){ 
//继承父类属性 
MyCompany.Employee.call(this,empName); 
//覆盖父类属性 
this.Position = "developer"; 
//扩展属性 
this.Technology = "C#"; 
} 
//继承父类原型方法 
MyCompany.Developer.prototype = new MyCompany.Employee(); 
//覆盖父类方法 
MyCompany.Developer.prototype.Work = function(){ 
return "I'm a "+ this.Position +",i'm good at "+ this.Technology +",i'm coding all day!" 
}

测试代码
<html> 
<title>javascript 面向对象的实现 namespace,class,继承,重载</title> 
<head> 
<script language="javascript" src="namespace.js" type="text/javascript"></script> 
<script language="javascript" src="employee.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
    function showEmployee(){                 
        var emp = new MyCompany.Employee("xiaoming"); 
        showInfo(emp); 
    } 
    function showDeveloper(){ 
        var emp = new MyCompany.Developer("Gates"); 
        showInfo(emp); 
    }     
    function showInfo(emp){ 
        alert(emp.ShowName()); 
        alert(emp.Work()); 
    } 
</script> 
</head> 
<body> 
<input type="button" value="show employee info" onclick="showEmployee();"/><br/><br/> 
<input type="button" value="show developer info" onclick="showDeveloper();"/> 
</body> 
</html>

源代码打包下载
Javascript 相关文章推荐
javascript实现的动态文字变换
Jul 28 Javascript
关于JS字符串函数String.replace()
Apr 07 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
详解JavaScript操作HTML DOM的基本方式
Oct 21 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
Feb 22 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
js+canvas实现滑动拼图验证码功能
Mar 26 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 #Javascript
jQuery 判断元素上是否绑定了事件
Oct 28 #Javascript
Firebug 字幕文件JSON地址获取代码
Oct 28 #Javascript
jquery 选择器部分整理
Oct 28 #Javascript
JavaScript 全角转半角部分
Oct 28 #Javascript
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 #Javascript
javascript 时间比较实现代码
Oct 28 #Javascript
You might like
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
vue.js的安装方法
2017/05/12 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python实现杨辉三角思路
2017/07/14 Python
python利用微信公众号实现报警功能
2018/06/10 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
python常用排序算法的实现代码
2019/11/08 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
缓刑人员的思想汇报
2014/01/11 职场文书
项目总经理岗位职责
2014/02/14 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
小学运动会通讯稿
2015/07/18 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python