童鞋们,我们今天聊聊js的继承,关于继承,平时开发基本用不到,但是面试没有不考的,我就想问,这是人干的事吗?

  好吧,迫于社会主义核心价值观,我们今天就来简单说一说js的继承,谁让它是面向对象编程很重要的一个方面呢

  首先一句定义,什么是继承:

  A对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。

  

  常见的集成方式有六种,我们今天依次简单的说一下,现在让我们把这六种方式分一下类,大致上可分为三类

  

  第一类:普通类

  这类继承方法有个特性,就是简单,容易实现,一共两种;

  

  1、原型链继承

  关键点:子类型的原型为父类型的一个实例对象,子类继承父类的属性和方法是将父类的私有属性和公有方法都作为自己的公有属性和方法

  

  

  缺点

    •   无法实现多继承

    •   来自原型对象的所有属性被所有实例共享

    •   创建子类实例时,无法向父类构造函数传参

    •   要想为子类新增属性和方法,必须要在Student.prototype = new Person() 之后执行,不能放到构造器中

  

  2、借用构造函数继承

  关键点:在子类型构造函数中通用call()调用父类型构造函数

  

  

  缺点

    •   实例并不是父类的实例,只是子类的实例

    •   只能继承父类的实例属性和方法,不能继承原型属性和方法

    •   无法实现函数复用,每个子类都有父类实例函数的副本,影响性能

  

    

  第二类:学习进化类

  这类继承方法就比较牛了,如果说上面两种方式都是普通型的,那接下来我们要介绍的就是那些通过学习其他类型身上的有点,改造自己不足的进化类型了,一共三种;

  

  1、原型链+借用构造函数的组合继承

  关键点:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用

  

  缺点调用了两次父类构造函数,生成了两份实例

  评价: 你看他就很牛了,他把上面的两种普通类型结合了,形成了自己独特的表

  

  2、(原型链+借用构造函数的组合继承)plus

  关键点:这种方式通过父类原型和子类原型指向同一对象,子类可以继承到父类的公有方法当做自己的公有方法,而且不会初始化两次实例方法/属性,避免的组合继承的缺点

  

  缺点:没办法辨别是实例是子类还是父类创造的,子类和父类的构造函数指向是同一个。

  评价:这个类型就更厉害了,如果上一个类型是iPhone8,那这个就是8plus,他是在上一个版本的基础上,又自我进化了,修补了初始化两次实例方法和属性这个缺点。

  

  3、(原型链+借用构造函数的组合继承)s

  关键点:借助原型可以基于已有的对象来创建对象,var B = Object.create(A)以A对象为原型,生成了B对象。B继承了A的所有属性和方法。

  

  

   

  缺点:几乎进化到了完美形态!

  评价:学习是永无止境的,苹果公司也继8plus之后推出了更强的手机系列,8s,又是一次进化;

  

  

  第三类:天赋型

  我们要承认一件事,世上真的有天赋这个东西,接下来我们要讲的天赋型就属于这种,它不同于基础型和学习进化型,他是一种独树一帜的方式,而赋予它天赋的则来自ES6的class关键字,仅有一种;

  

  1、ES6中class 的继承

  关键点:通过extends关键字实现继承

  

  

   缺点:它在有着以上所有优点的前提下,存在着一个缺点,类似于慧极必伤,那就是并不是所有的浏览器都支持class关键字。

    

  OK,开始敲黑板,以上三类六种就是我们今天要说的js继承方法,当然三类是我胡诌的,只是希望能加深大家的理解;

  

  参考文章

    •   JS实现继承的几种方式

    •   JavaScript深入之继承的多种方式和优缺点

    •   JavaScript常见的继承方式

    •   阮一峰ES6入门之class的继承

    • JavaScript 常见的继承方式

  

JS继承(简单理解版)的更多相关文章

  1. require.js 模块化简单理解

    组件化 基于UI 样式布局 没有过多 js 代码操作的 比如:一个导航栏 一个表单 一个搜索框 一个侧边栏 一个html 等等.... 模块化 基于功能模块 一个可以替换的js部分称之为模块(modu ...

  2. 关于js动画简单理解;

    1.CSS样式提供了运动 过度的属性:transition 过度的属性值:attr  ,time  , liner  ,  delay: 值分别是:属性(css),花费的时间,变化的速度(默认匀速), ...

  3. 对于js原型和原型链继承的简单理解(第三种,复制继承)

    复制继承:简单理解,就是把父对象上的所有属性复制到自身对象上: function Cat(){ this.climb = function(){ alert("我会爬树"); } ...

  4. JS继承的从入门到理解

    开场白 大三下学期结束时候,一个人跑到帝都来参加各厂的面试,免不了的面试过程中经常被问到的问题就是JS中如何实现继承,当时的自己也是背熟了实现继承的各种方法,回过头来想想却不知道__proto__是什 ...

  5. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  6. js简单 图片版时钟,带翻转效果

    js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  7. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  8. js 继承的简单易懂小例子

    js 继承 今天主要说原型链继承.构造继承.组合继承三种常用继承方式,分享一下我的理解. 原型链继承例子1 //原型继承function A(name){ this.name = name;}func ...

  9. 如何简单理解js中this的指向

    前序 每个人学js都会被this指向这个东西搞得很蒙,那就是this的指向问题.首先,我们要明白 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上thi ...

随机推荐

  1. springmvc Cacheable

    直接上代码: <cache:annotation-driven /> <bean id="cacheManager" class="org.spring ...

  2. 多线程中的detach

    从 thread 对象分离执行的线程,允许执行独立地持续.一旦线程退出,则释放所有分配的资源.(就是两个线程彼此相互独立) 调用 detach 后, *this 不再占有任何线程. #include ...

  3. pandas读取xlsx

    一.使用pandas读取xlsx 引用pandas库 import pandas as pd pd.read_excel(path, sheet_name=0, header=0, names=Non ...

  4. 《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全

    引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施.这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操作相关 ...

  5. 源码安装zabbix-oracle

    源码安装zabbix_agent4.0.3   1.源码包下载地址:https://www.zabbix.com/download_sources 2.下载完后上传在任意目录用root用户创建以下脚本 ...

  6. Annotation详解

    转自:http://www.doc88.com/p-995532241886.html 首先我们定义一个简单的注解 package com.qjy.annotation; import java.la ...

  7. hexo换了电脑,怎么办?

    个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 背景: 今天公司的苹果电脑硬件升级,之前看过h ...

  8. jQuery 基本选择器

    1 基本选择器 $(‘#id属性值’)  ----------->document.getElementById() $(‘tag标签名称’)----------->document.ge ...

  9. 拾遗:Perl 正则表达式

    三种正则模式: 匹配:m//,其中前缀 m 可省略 替换:s/// 转化:tr/// 操作符: =~:存在匹配项则返回结果 !~:不存在匹配项则返回结果 修饰符: i:忽略大小写,如:s/.../.. ...

  10. 2.用Python套用Excel模板,一键完成原亮样式

    from xlutils.copy import copy import xlrd import xlwt tem_excel=xlrd.open_workbook('日统计.xls',formatt ...