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 相关文章推荐
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
IE6已终止操作问题的2种情况及解决
Apr 23 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
jQuery插件扩展实例【添加回调函数】
Nov 26 Javascript
JS经典正则表达式笔试题汇总
Dec 15 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
vue router自动判断左右翻页转场动画效果
Oct 10 Javascript
JS实现简易留言板特效
Dec 23 Javascript
js实现select下拉框选择
Jan 11 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
解析link_mysql的php版
2013/06/30 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
利用python汇总统计多张Excel
2020/09/22 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
护理实习自我鉴定
2013/12/14 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
三年级学生期末评语
2014/12/26 职场文书
死亡诗社观后感
2015/06/05 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js