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 相关文章推荐
JS图片预加载 JS实现图片预加载应用
Dec 03 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
angular5 httpclient的示例实战
Mar 12 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
小程序实现图片移动缩放效果
May 26 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 27 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
文章推荐系统(三)
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
php 页面执行时间计算代码
2008/12/04 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
Python使用chardet判断字符编码
2015/05/09 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
python安装教程
2018/02/28 Python
python中字符串的操作方法大全
2018/06/03 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python实现二分查找算法
2020/09/18 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
四好少年事迹材料
2014/01/12 职场文书
暑期研修感言
2014/02/17 职场文书
委托书样本
2014/04/02 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
白莲教口号
2014/06/18 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
贪污检举信范文
2015/03/02 职场文书
小学班主任个人总结
2015/03/03 职场文书
创业计划书之酒吧
2019/12/02 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技