javascript 继承实现方法


Posted in Javascript onAugust 26, 2009

下面我给出几种常用的方法:
1 .对象冒充
原理: 构造函数使用this关键字给所有属性和方法赋值, 因为构造函数只是一个函数,所以可以使ClassA的构造函数成为classB的方法,然后调用它.这样classB就会收到classA的构造函数中定义的属性和方法.例子:

function classA(name) 
{ 
this.name=name; 
this.showName=function(){alert(this.name);} 
} 
function classB(name) 
{ 
this.newMethod = classA; 
this.newMethod(name); 
} 
obj = new classA("hero"); 
objB = new classB("dby"); 
obj.showName(); // print hero 
objB.showName(); // print dby 说明classB 继承了classA的方法.

对象冒充可以实现多重继承 例如
function classz(){ 
this.newMethod = classX; 
this.newMethod(); 
delete this.newMethod; 
this.newMethod=classY; 
this.newMethod(): 
delete this.newMethod; 
}

但是如果classX和classY有相同的属性或者方法,classY具有高优先级.
2.call()方法
call方法使与经典的对象冒充法就相近的方法,它的第一个参数用作this的对象,其他参数都直接传递给函数自身.
function sayName(perfix) 
{ 
alert(perfix+this.name); 
} 
obj= new Object(); 
obj.name="hero"; 
sayName.call(obj,"hello," ); 
function classA(name) 
{ 
this.name=name; 
this.showName=function(){alert(this.name);}; 
} 
function classB(name) 
{ 
classA.call(this,name); 
} 
objB = new classB("bing"); 
objB.showName();////说明classB继承classA的showName方法

3.apply()方法
aplly()方法有2个参数,一个用作this对象,一个使传递给函数的参数数组.
function sayName(perfix) 
{ 
alert(perfix+this.name); 
} 
obj= new Object(); 
obj.name="hero"; 
sayName.aplly(obj,new Array("hello,") );

4. 原型链
prototype对象的任何属性和方法都会被传递给对应类的所有实例,原型链就是用这种方式来显现继承.
function classA (){} 
classA.prototype.name="hero"; 
classA.prototype.showName=function(){alert(this.name)} 
function classB(){} 
classB.prototype=new classA(); 
objb = new classB() 
objb.showName();//print hero 说明b继承了a的方法

这里需要注意 调用classA的构造函数时,没有给它传递参数,这是原型链的标准做法,确保函数的构造函数没有任何参数.
并且 子类的所有属性和方法,必须出现在prototype属性被赋值后,应为在它之前赋的值会被删除.因为对象的prototype属性被替换成了新对象,添加了新方法的原始对象将被销毁.

5 混和方式
就是用冒充方式 定义构造函数属性,用原型法定义对象方法.

function classA(name) 
{ 
this.name=name; 
} 
classA.prototype.showName=function(){alert(this.name)} 
function classB(name) 
{ 
classA.call(this,name); 
} 
classB.prototype = new classA(); 
classB.prototype.showName1=function(){alert(this.name+"*****");}; 
obj = new classB("hero"); 
obj.showName(); 
obj.showName1();

在classB的构造函数中通过调用call方法 继承classA中的name属性,用原型链来继承classA的showName方法.
Javascript 相关文章推荐
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
javascript的变量、传值、传址、参数之间关系
Jul 26 Javascript
三个js循环的关键字示例(for与while)
Feb 16 Javascript
javascript函数命名的三种方式及区别介绍
Mar 22 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
Feb 09 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
Jul 20 Javascript
vue-awesome-swiper滑块插件使用方法详解
Nov 27 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
Aug 26 #Javascript
JavaScript 获取用户客户端操作系统版本
Aug 25 #Javascript
JS 获取span标签中的值的代码 支持ie与firefox
Aug 24 #Javascript
jquery 表单进行客户端验证demo
Aug 24 #Javascript
JS 时间显示效果代码
Aug 23 #Javascript
JQuery this 和 $(this) 的区别
Aug 23 #Javascript
ext checkboxgroup 回填数据解决
Aug 21 #Javascript
You might like
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
Vue组件通信的四种方式汇总
2018/02/08 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
Python字符串和文件操作常用函数分析
2015/04/08 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
django之session与分页(实例讲解)
2017/11/13 Python
机器学习实战之knn算法pandas
2019/06/22 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
销售工作人员的自我评价分享
2013/11/10 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
护士实习自荐信
2015/03/06 职场文书
2015年科协工作总结
2015/05/19 职场文书
驻村工作简报
2015/07/20 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL