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 相关文章推荐
通过event对象的fromElement属性解决热区设置主实体的一个bug
Dec 22 Javascript
JavaScript 学习技巧
Feb 17 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
jquery访问ashx文件示例代码
Aug 11 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
vue2.0实现导航菜单切换效果
May 08 Javascript
node.js中express-session配置项详解
May 31 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
Feb 01 jQuery
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
Oct 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
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP xpath()函数讲解
2019/02/11 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
详解Python_shutil模块
2019/03/15 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
Python制作词云图代码实例
2019/09/09 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
采购主管工作职责
2013/12/12 职场文书
成考报名单位证明范本
2014/01/16 职场文书
简历的自我评价
2014/02/03 职场文书
招商专员岗位职责
2014/02/08 职场文书
职工代表大会主持词
2014/04/01 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
上课迟到检讨书
2015/05/06 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android