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 相关文章推荐
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
jQuery的$.proxy()应用示例介绍
Apr 03 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
刷新页面后让控制台的js代码继续执行
Sep 20 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 Javascript
JavaScript 事件代理需要注意的地方
Sep 08 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 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面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
Javascript面向对象编程
2012/03/18 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
python计算导数并绘图的实例
2020/02/29 Python
Python包和模块的分发详细介绍
2020/06/19 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年老干部工作总结
2015/04/23 职场文书
公司仓库管理制度
2015/08/04 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers