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 相关文章推荐
jquery 1.4.2发布!主要是性能与API
Feb 25 Javascript
jQuery前端分页示例分享
Feb 10 Javascript
JavaScript获取文本框内选中文本的方法
Feb 20 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
Jul 01 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
移动端效果之Swiper详解
Oct 09 Javascript
vue实现密码显示隐藏切换功能
Feb 23 Javascript
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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
产假请假条
2014/04/10 职场文书
政治思想表现评语
2014/05/04 职场文书
公司活动总结范文
2014/07/01 职场文书
离婚财产处理协议书
2014/09/30 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
学生党员检讨书范文
2014/12/27 职场文书
致运动员赞词
2015/07/22 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
如何用python清洗文件中的数据
2021/06/18 Python