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获取选中radio对应的值(一句代码)
Jun 03 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
前端js文件合并的三种方式推荐
May 19 Javascript
JavaScript实现移动端轮播效果
Jun 06 Javascript
ES6 Proxy实现Vue的变化检测问题
Jun 11 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
JavaScript在web自动化测试中的作用示例详解
Aug 25 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 Javascript
vscode 调试 node.js的方法步骤
Sep 15 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
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类的使用 实例代码讲解
2009/12/28 PHP
php 过滤器实现代码
2010/08/09 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
Javascript 继承机制实例
2009/08/12 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
以太网Ethernet IEEE802.3
2013/08/05 面试题
高中生操行评语大全
2014/04/25 职场文书
企业人事任命书
2014/06/05 职场文书
2016年教师新年寄语
2015/08/18 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA