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 相关文章推荐
JQuery Easyui Tree的oncheck事件实现代码
May 28 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 Javascript
AngularJs动态加载模块和依赖注入详解
Jan 11 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
angular中的cookie读写方法
Aug 02 Javascript
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
基于vue-element组件实现音乐播放器功能
May 06 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
Jul 21 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 Javascript
vue如何实现动态加载脚本
Feb 05 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+JS实现搜索自动提示(实例)
2013/06/09 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
一些不错的js函数ajax
2008/08/20 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
Python hashlib模块用法实例分析
2018/06/12 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Django中的用户身份验证示例详解
2019/08/07 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
python数据类型强制转换实例详解
2020/06/22 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
scrapy头部修改的方法详解
2020/12/06 Python
如何用Django处理gzip数据流
2021/01/29 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
如何在Shell脚本中使用函数
2015/09/06 面试题
八年级美术教学反思
2014/02/02 职场文书
教师一岗双责责任书
2014/04/16 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
罚站检讨书
2015/01/29 职场文书
2015政治思想表现评语
2015/03/25 职场文书
领导干部学习心得体会
2016/01/23 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
MySQL 数据表操作
2022/05/04 MySQL