您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

什么是继承?继承的方式有几种?它们的优缺点分别是什么?

时间:2021-04-07 14:37:28  来源:今日头条  作者:代码开发

这里介绍的是ES6之前的继承方式,没有写 class 继承哦。

什么是继承

继承是指一个对象直接使用另一对象的属性和方法。

js中继承的方法有:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承

1. 原型链继承

(1). 原型、构造函数和实例的关系

function Person() {		
}
Person.prototype 
var p = new Person();

构造函数:Person

属性:prototype => 指向原型对象

原型对象:Person.prototype

属性:constructor => 指向构造函数

原型、构造函数和实例的关系:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

出现上面那个结果的原因是,实例是没有constructor这个属性的,p.constructor其实是访问的p.prototype.constructor,但是由于我们用对象字面量的方式重写了Person.prototype,所以会顺着原型链往上找,找到
Object.prototype.constructor.

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

(2). 原型链

如(1)中所示,如果让(1)中的原型对象成为另外一个类型的实例,以此类推,便构成了原型链。

注意:所有构造函数的默认原型都是Object的实例,因此默认原型会有一个prototype指针指向Object.prototype。

(3). 原型链继承

主要思想是:通过设定一种类型的原型是另一种类型的实例来继承另外一种类型。

例如:B要继承A

创建A的实例:new A();

让其等于B的原型:B.prototype = new A(); //B则继承了A里面所有的属性和方法

原型搜索机制:以读取方式访问一个实例属性时,在该实例中搜索该属性,若没有找到再搜索实例的原型,顺着原型链往上找。

代码示例如下:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

原型继承的缺点:

(1).超类型中有引用类型(color是一个数组)的属性时,子类型继承超类型,一个子类型中对该引用类型修改,会反应到所有的子类型上。所有子类型共享超类型的引用类型.

例如:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

(2).创建子类型实例时无法向超类型的构造函数中传递参数

2. 构造函数继承

利用call()和Apply()方法在新的对象上执行超类型的构造函数。

超类型:指的是被继承的类型。

a.func.call(b) /*指的是a对象的方法应用到b对象上*/
a.func.apply(b) // 主要是参数的区别

代码示例:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

构造函数继承的优点:

使子类Child在创建对象的同时传递参数到父类Parent

构造函数继承的缺点:

无法进行函数的复用,a的原型中定义的方法也无法继承。

3. 组合继承(将原型链继承和借用构造函数继承组合起来)

主要思想是:使用原型链实现对a原型属性和方法的继承,通过构造函数实现对a实例属性的继承。

代码示例如下:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

缺点:要调用两次超类型的构造函数(注释的两个地方)

4. 原型式继承

主要思想是:实现对父类的浅复制,产生一个副本

Object.create()函数实现的就是原型式继承

代码示例如下:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

这种继承方式是将child的原型设为parent,通过child可以访问parent的属性和方法,而不需要将同名属性和方法在child里面再重新定义一遍。

Object.create() 可接收两个参数,第一个参数是需要继承的对象,第二个参数是新生成的对象中新增加的属性和方法。

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

5. 寄生式继承

主要思想:寄生式继承是基于原型式继承,创建一个仅用于封装继承的函数

代码示例如下:

什么是继承?继承的方式有几种?它们的优缺点分别是什么?收藏

 

欢迎关注。



Tags:继承   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
自古以来,房产在家庭中占据的地位都无足轻重,对很多普通家庭来说,房产或许就是众多家庭最值钱的东西了,更是很多财富阶层青睐的资产配置之一。而家族财富传承中最广泛最常见的资...【详细内容】
2021-12-24  Tags: 继承  点击:(6)  评论:(0)  加入收藏
最近我国楼市遇冷,很多城市的房价都出现了下跌的趋势,正常情况下,这种现象应该是刚需购房的好机会。但实际情况确实很多城市的成交量在持续走低,购房者的观望情绪更加浓重。 ...【详细内容】
2021-12-03  Tags: 继承  点击:(11)  评论:(0)  加入收藏
IOS/iPadOS 15.2更新了一项新功能名为Digital Legacy(数字遗产),使用者可以设置某个人为自己的遗产联系人,以方便机主去世后访问信息。 只能说果子太贴心了,居然连大家身后事都已...【详细内容】
2021-11-11  Tags: 继承  点击:(80)  评论:(0)  加入收藏
目前遗产继承主要有两种方式,一种是到公证处公证继承,一种是通过法院诉讼由法院调解或法院判决继承。那么两者有什么优缺点吗?民法典已生效,继承法已被废止公证继承顾名思义就是...【详细内容】
2021-10-08  Tags: 继承  点击:(253)  评论:(0)  加入收藏
鲁法案例【2021】285裁判要旨1.家庭成员通过分家析产所获得财产为其个人合法财产,财产所有人死亡后即为其遗产,其他家庭成员不得重新进行分配。2.分家析产协议同时约定获得财...【详细内容】
2021-09-06  Tags: 继承  点击:(47)  评论:(0)  加入收藏
子女继承父母的遗产,很多人都认为是天经地义。但现实中,在继承房产过户时,很多人都会遇到难题。那就是程序复杂、手续繁琐,有些人甚至会遇到无法进行下去的困局。本文通过法律法规的变迁,结合现实情况,来分析一下原因,并展望...【详细内容】
2021-08-27  Tags: 继承  点击:(103)  评论:(0)  加入收藏
因股权涉及的价值往往较高,且其继承并非仅涉及到《民法典》继承编中的内容,背后往往还牵涉公司控制权、公司治理甚至公司兴衰、存亡的重大问题。企业家身故后,妥善处置好其股权...【详细内容】
2021-08-04  Tags: 继承  点击:(73)  评论:(0)  加入收藏
随着城镇化的快速发展,越来越多的农村居民落户城镇的意愿加强,以便享受更加完善的社保福利保障。但近些年,城镇地区物价水平持续上涨,仿佛千斤重担压在自己身上喘不过气,再加上国...【详细内容】
2021-07-03  Tags: 继承  点击:(83)  评论:(0)  加入收藏
房子在家庭资产中的地位不需要再多加强调,反正很高。随着我国老龄化社会不断向纵深发展,很多人迫切地想知道把自己名下的房产给孩子,怎样才能最省钱、最省手续。本文就这一问题...【详细内容】
2021-06-09  Tags: 继承  点击:(101)  评论:(0)  加入收藏
Java中的封装、继承和多态知识点是学习java必备的基础知识,看似简单,真正理解起来还是有一定难度的,今天小编再次通过实例代码给大家讲解java 封装继承多态知识,感兴趣的朋友一...【详细内容】
2021-05-31  Tags: 继承  点击:(165)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条