js实现继承的5种方式


Posted in Javascript onDecember 01, 2015

本文实例讲述了js实现继承的5种方式。分享给大家供大家参考,具体如下:

1、继承第一种方式:对象冒充

function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承
  //第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象,
  //第二步:执行this.method方法,即执行Parent所指向的对象函数
  //第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法 
  this.method = Parent;
  this.method(username);//最关键的一行
  delete this.method;
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

2、继承第二种方式:call()方法方式

call方法是Function类中的方法
call方法的第一个参数的值赋值给类(即方法)中出现的this
call方法的第二个参数开始依次赋值给类(即方法)所接受的参数

function test(str){
  alert(this.name + " " + str);
}
var object = new Object();
object.name = "zhangsan";
test.call(object,"langsin");//此时,第一个参数值object传递给了test类(即方法)中出现的this,而第二个参数"langsin"则赋值给了test类(即方法)的str
function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  Parent.call(this,username);
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

3、继承的第三种方式:apply()方法方式

apply方法接受2个参数,
A、第一个参数与call方法的第一个参数一样,即赋值给类(即方法)中出现的this
B、第二个参数为数组类型,这个数组中的每个元素依次赋值给类(即方法)所接受的参数

function Parent(username){ 
  this.username = username; 
  this.hello = function(){ 
   alert(this.username); 
  } 
} 
function Child(username,password){ 
  Parent.apply(this,new Array(username)); 
  this.password = password; 
  this.world = function(){ 
   alert(this.password); 
  } 
} 
var parent = new Parent("zhangsan"); 
var child = new Child("lisi","123456"); 
parent.hello(); 
child.hello(); 
child.world();

4、继承的第四种方式:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承

function Person(){ 
} 
Person.prototype.hello = "hello"; 
Person.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(){ 
} 
Child.prototype = new Person();//这行的作用是:将Parent中将所有通过prototype追加的属性和方法都追加到Child,从而实现了继承 
Child.prototype.world = "world"; 
Child.prototype.sayWorld = function(){ 
  alert(this.world); 
} 
var c = new Child(); 
c.sayHello(); 
c.sayWorld();

5、继承的第五种方式:混合方式

混合了call方式、原型链方式

function Parent(hello){ 
  this.hello = hello; 
} 
Parent.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(hello,world){ 
  Parent.call(this,hello);//将父类的属性继承过来 
  this.world = world;//新增一些属性 
} 
Child.prototype = new Parent();//将父类的方法继承过来 
Child.prototype.sayWorld = function(){//新增一些方法 
  alert(this.world); 
} 
var c = new Child("zhangsan","lisi"); 
c.sayHello(); 
c.sayWorld();

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
很全的显示阴历(农历)日期的js代码
Jan 01 Javascript
动态表格Table类的实现
Aug 26 Javascript
jQuery 表格工具集
Apr 25 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
Dec 09 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
6种javascript显示当前系统时间代码
Dec 01 #Javascript
基于jQuery实现网页打印功能
Dec 01 #Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
Dec 01 #Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 #Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 #Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 #Javascript
You might like
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python访问类中docstring注释的实现方法
2015/05/04 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python制作词云图代码实例
2019/09/09 Python
python能做哪方面的工作
2020/06/15 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
导游词怎么写
2015/02/04 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
我是特种兵观后感
2015/06/11 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript
React Fragment介绍与使用详解
2021/11/11 Javascript
详解Python中__new__方法的作用
2022/03/31 Python