javascript 面向对象继承


Posted in Javascript onNovember 26, 2009

在prototype框架中的类继承实现机制

//为Object类添加静态方法:extend 
Object.extend = function(destination, source) { 
for(property in source) { 
destination[property] = source[property]; 
} 
return destination; 
} 
//通过Object类为每个对象添加方法extend 
Object.prototype.extend = function(object) { 
return Object.extend.apply(this, [this, object]); 
}

Object.extend方法很容易理解,它是Object类的一个静态方法,用于将参数中source的所有属性都赋值到destination对象中,并返回destination的引用。下面解释一下Object.prototype.extend的实现,因为Object是所有对象的基类,所以这里是为所有的对象都添加一个extend方法,函数体中的语句如下:
Object.extend.apply(this,[this,object]);
这一句是将Object类的静态方法作为对象的方法运行,第一个参数this是指向对象实例自身;第二个参数是一个数组,包括两个元素:对象本身和传进来的对象参数object。函数功能是将参数对象object的所有属性和方法赋值给调用该方法的对象自身,并返回自身的引用。有了这个方法,下面看类继承的实现:
<script language="JavaScript" type="text/javascript"> 
<!-- 
//定义extend方法 
Object.extend = function(destination, source) { 
for (property in source) { 
destination[property] = source[property]; 
} 
return destination; 
} 
Object.prototype.extend = function(object) { 
return Object.extend.apply(this, [this, object]); 
} 
//定义class1 
function class1(){ 
//构造函数 
} 
//定义类class1的成员 
class1.prototype={ 
method:function(){ 
alert("class1"); 
}, 
method2:function(){ 
alert("method2"); 
} } 
//定义class2 
function class2(){ 
//构造函数 
} 
//让class2继承于class1并定义新成员 
class2.prototype=(new class1()).extend({ 
method:function(){ 
alert("class2"); 
} 
}); 
//创建两个实例 
var obj1=new class1(); 
var obj2=new class2(); 
//试验obj1和obj2的方法 
obj1.method(); 
obj2.method(); 
obj1.method2(); 
obj2.method2(); 
//--> 
</script>

从运行结果可以看出,继承被正确的实现了,而且派生类的额外成员也可以以列表的形式加以定义.
Javascript 相关文章推荐
一个选择最快的服务器转向代码
Apr 27 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
Mar 28 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
JS 对输入框进行限制(常用的都有)
Jul 30 Javascript
js改变Iframe中Src的方法
May 05 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
May 25 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
PassWord输入框代码分享
Jun 07 Javascript
js完整倒计时代码分享
Sep 18 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
Nov 26 #Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 #Javascript
Ext grid 添加右击菜单
Nov 26 #Javascript
JS 判断undefined的实现代码
Nov 26 #Javascript
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 #Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 #Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 #Javascript
You might like
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
Python获取邮件地址的方法
2015/07/10 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python实现学生管理系统开发
2020/07/24 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
幼儿园教师培训制度
2014/01/16 职场文书
高一化学教学反思
2014/02/05 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers