童鞋们,我们今天聊聊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. Dubbo执行流程?

    Dubbo执行流程? 0 start: 启动Spring容器时,自动启动Dubbo的Provider 1.register: Dubbo的Provider在启动后自动会去注册中心注册内容.注册的内容包 ...

  2. vue 外卖app(2) stylus

    1.安装 npm  install stylus   stylus-loader  --save-dev 安装成功 2.编写样式 <style  lang="stylus" ...

  3. 【FJWC2018】最大真因数

    题面 Description 一个合数的真因数是指这个数不包括其本身的所有因数, 例如 6 的正因数有1, 2, 3, 6,其中真因数有 1, 2, 3. 一个合数的最大真因数则是这个数的所有真因数中 ...

  4. HIVE的高级操作

    二.视图 1.Hive 的视图和关系型数据库的视图区别 和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别: (1)只有逻辑视图,没有物 ...

  5. CSS四种定位及应用

    定位(position) 如果,说浮动, 关键在一个 “浮” 字上面, 那么 我们的定位,关键在于一个 “位” 上. PS: 定位是我们CSS算是数一数二难点的了,但是,你务必要学好它,我们CSS离不 ...

  6. 取对数求阶乘位数——lightoj1045

    /* 求 n! 在base进制下的位数 取对数,用换底公式,预处理对数前缀和 b^x = n! x = log_b(n!) = log_10(n!)/log_10(b) 对x向上取整即可 */ #in ...

  7. HMaster高可用

    1.确保HBase集群已正常停止 $ bin/stop-hbase.sh 2.在conf目录下创建backup-masters文件 $ touch conf/backup-masters 3.在bac ...

  8. ZK4字命令

    zookeeper4字命令:两种方式,1.通过telnet链接服务器,执行stat.2.echo stat|nc xxx.xxx.xxx.xxx 2181效果是一样的conf:zk服务器运行时的基本信 ...

  9. Python实现二叉堆

    Python实现二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树).二叉堆有两种:最大堆和最小堆.最大堆:父结点的键值总是大于或等于任何一个子节点的键值:最小堆: ...

  10. SPSS如何调用已建立的数据文件

    SPSS如何调用已建立的数据文件 调用已建立的数据文件 SPSS可以调用SPSS(*.sav),Excel(*.xls),dBASE(*.dbf),ASCII(*.dat,*.txt)等数据文件. 2 ...