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实现浏览器菜单命令
Sep 05 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
May 11 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 Javascript
vue项目开发中setTimeout等定时器的管理问题
Sep 13 Javascript
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
js实现点击生成随机div
Jan 16 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
Dec 24 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 session 错误
2009/05/21 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
javascript 写类方式之八
2009/07/05 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
javascript 数组操作详解
2015/01/29 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python中装饰器的一个妙用
2015/02/08 Python
使用python实现个性化词云的方法
2017/06/16 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
2014年元旦活动方案
2014/02/15 职场文书
学雷锋演讲稿
2014/03/04 职场文书
网络编辑岗位职责
2014/03/18 职场文书
中英文求职信范文
2015/03/19 职场文书
升学宴学生致辞
2015/07/27 职场文书
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技