20class的继承

复习

没有class和extends,使用混合继承

function Parent(name) {}
function Son(name,age) {
  // 一: 调用父类
  Parent.call(this,name)
  this.age = age
}
// 二:继承原型上方法 --- 不需要参数
Son.prototype = new Parent()

介绍

  1. 使用关键字extends
  2. 子类的constructor必须要调用super

原型

  1. js中的继承依旧是基于prototype
  2. 对子类使用Object.getPrototypeOf(SubClass)的到是父类

super 关键字

  1. super作为函数
  • 只能在构造函数中使用
  • super(param)相当于Parent.prototype.constructor.call(Son,param)
  1. super作为对象
  • 在非静态方法中,super指的是父类原型
  • 在静态方法中,super指的是父类
  • 通过super对象,调用父类方法,方法中的this绑定子类的this
  1. console.log(super)报错,因为无法判断super是对象还是函数
  2. 对象总是继承对象,对象中可以直接使用super

两条继承链

  1. Son.__proto__ == Parent
  2. Son.prototype.__proto__ == Parent.prototype
  3. 子类实例原型的原型指向父类实例的原型p1.__proto__.__proto__ = p2.__proto__

原生构造函数的继承

原生构造函数大致有,String,Number,Boolean,Array,Date,Function,Object,RegExp

  1. es5中不允许继承原生构造函数,即使使用“混合继承”的方式,新生成的类不会有原生构造函数的行为
  2. es6中允许继承原生构造函数
  3. 在继承Object类的时候有行为差异,无法通过super方法向父类Object传参
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 4,129评论 3 11
  • 本文先对es6发布之前javascript各种继承实现方式进行深入的分析比较,然后再介绍es6中对类继承的支持以及...
    lazydu阅读 16,736评论 7 44
  • 面向对象的语言都有一个类的概念,通过类可以创建多个具有相同方法和属性的对象,ES6之前并没有类的概念,在ES6中引...
    Erric_Zhang阅读 1,143评论 1 4
  • 昨天晚上,很晚了,一个长沙的朋友打电话给我,聊天间,得知,她深夜从长沙赶到我们这三线城市,是因为她的好友,结肠癌需...
    山谷里的树阅读 724评论 2 3
  • 打开设置 - 通用,屏幕的左上角箭头那里会有三个小黑点一闪而过。 下拉通知栏,点编辑,然后迅速上划通知栏,再下拉通...
    醉了君莫笑阅读 318评论 1 3