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 字符串连接[性能比较]
May 10 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
使用koa2创建web项目的方法步骤
Mar 12 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 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抓取页面的几种方法详解
2013/06/17 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
PHP递归算法的简单实例
2019/02/28 PHP
可以将word转成html的js代码
2010/04/11 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python3.3实现乘法表示例
2014/02/07 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
python3 拼接字符串的7种方法
2018/09/12 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python实现一组典型数据格式转换
2018/12/15 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python3运算符常见用法分析
2020/02/14 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python数据正态性检验实现过程
2020/04/18 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
安全生产先进个人材料
2014/02/06 职场文书
医院义诊活动总结
2014/07/04 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python