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实现单继承和多继承的简单方法
Mar 29 Javascript
js下写一个事件队列操作函数
Jul 19 Javascript
JavaScript的document对象和window对象详解
Dec 30 Javascript
JavaScript中json对象和string对象之间相互转化
Dec 26 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
Mar 31 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
Sep 15 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 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
php基础知识:控制结构
2006/12/13 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
理解javascript中的闭包
2017/01/11 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
python中defaultdict的用法详解
2017/06/07 Python
python操作oracle的完整教程分享
2018/01/30 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
python虚拟环境完美部署教程
2019/08/06 Python
wxPython实现整点报时
2019/11/18 Python
详解python 中in 的 用法
2019/12/12 Python
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
关于爱情的广播稿
2014/01/16 职场文书
电气个人求职信范文
2014/02/04 职场文书
公司贷款承诺书
2014/05/30 职场文书
任命书模板
2014/06/04 职场文书
实验室的标语
2014/06/20 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
html5表单的required属性使用
2021/07/07 HTML / CSS