博客
关于我
js之继承
阅读量:198 次
发布时间:2019-02-28

本文共 2022 字,大约阅读时间需要 6 分钟。

一、什么是继承

继承是类与类之间的关系,其作用是使得子类具有父类别的各种属性和方法。

二、继承的实现方式

想要继承,就必须要提供个父类(继承谁,提供继承的属性)

// 创建一个人类,并且人类带有名字 吃饭和能跑的属性function Human(name) {         this.name = name      this.eat = function () {           console.log('吃饭')      }    }    Human.prototype.run = function () {         console.log('我很能跑')    }
1.原型链继承(重点:让新实例的原型等于父类的实例。)
// 创建一个男人类,并且让男人类 继承 人类有名字 吃饭和能跑的属性function Man(age) {         this.age = age    }    Man.prototype = new Human("小王") // 重点        let man = new Man('11')    console.log(man.age) // 11    console.log(man.name) // '小王'    man.run() // '我很能跑'    let man2 = new Man('33')    console.log(man2.age) // 33    console.log(man2.name) // '小王'    man2.run() // '我很能跑'

缺点:

  • 新实例无法向父类构造函数传参。
  • 继承单一。
  • 所有新实例都会共享父类实例的属性。(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原型属性也会被修改!)
2.借用构造函数继承(重点:用.call()和.apply()将父类构造函数引入子类函数)
function Man(name, age) {         Human.call(this, name) // 重点      this.age = age    }    let man1 = new Man('小王', 12)    console.log(man1.name) // 小王    console.log(man1.age) // 12    man1.eat() // 吃饭    man1.run() // Uncaught TypeError: man1.run is not a function    let man2 = new Man('大王', 21)    console.log(man2.name) // 大王    console.log(man2.age) // 21

缺点:

  • 只能继承父类构造函数的属性。
  • 无法实现构造函数的复用。(每次用每次都要重新调用)
  • 每个新实例都有父类构造函数的副本,臃肿。
3.组合继承(组合原型链继承和借用构造函数继承)(常用)
function Man(age, name) {         Human.call(this, name) // 重点      this.age = age    }    Man.prototype = new Human() // 重点    let man1 = new Man('小王', 12)    console.log(man1.name) // 小王    console.log(man1.age) // 12    man1.eat() // 吃饭    man1.run() // 我很能跑    let man2 = new Man('大王', 21)    console.log(man2.name) // 大王    console.log(man2.age) // 21

优点:

  • 可以继承父类原型上的属性,可以传参,可复用。

缺点:

  • 调用了两次父类构造函数(耗内存),子类的构造函数会代替原型上的那个父类构造函数。
4.原型式继承(用一个函数包装一个对象,然后返回这个函数的调用,这个函数就变成了个可以随意增添属性的实例或对象。object.create()就是这个原理。)
function Man(obj) {         function F() {   }      F.prototype = obj      return new F()    }    let man = new Human('小')    let man1 = Man(man)    console.log(man1.name) // 小

缺点:

  • 所有实例都会继承原型上的属性。
  • 无法实现复用。(新实例属性都是后面添加的)

web前端技术交流QQ群:327814892

转载地址:http://ktri.baihongyu.com/

你可能感兴趣的文章
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>