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 相关文章推荐
Ajax 数据请求的简单分析
Apr 05 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
详解RequireJS按需加载样式文件
Apr 12 Javascript
Angular 1.x个人使用的经验小结
Jul 19 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
javascript实现最长公共子序列实例代码
Feb 05 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
Vue.js实现可排序的表格组件功能示例
Feb 19 Javascript
js实现简单五子棋游戏
May 28 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
VsCode里的Vue模板的实现
Aug 12 Javascript
JS异步堆栈追踪之为什么await胜过Promise
Apr 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
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
python中的闭包用法实例详解
2015/05/05 Python
Python中property属性实例解析
2018/02/10 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python发送邮件实现基础解析
2020/08/14 Python
python 代码运行时间获取方式详解
2020/09/18 Python
浅谈python 类方法/静态方法
2020/09/18 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
新学期国旗下演讲稿
2014/05/08 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
建筑安全生产责任书
2014/07/22 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
人事代理委托书
2014/09/27 职场文书
金秋助学感谢信
2015/01/21 职场文书
冰雪公主观后感
2015/06/16 职场文书
高三数学教学反思
2016/02/18 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
python实现的web监控系统
2021/04/27 Python
python cv2图像质量压缩的算法示例
2021/06/04 Python