ES6-Class的继承

1、基本语法

  • ES6中的继承直接通过extends关键字来实现继承;
  • 子类的constructor中必须显示调用super()方法。
class A {}
class B extends A {
  constructor () {
    super();
  }
}

在子类的constructor中调用了super()方法之后,才会生成子类的this对象。
因此,this对象的使用只能放在super()方法之后调用。

2、使用Object.getPrototypeOf()获取子类的父类

Object.getPrototypeOf(B) === A // true

3、super关键字的使用

super关键字有两种使用方法:

  • 作为super方法来调用,生成子类实例并实现继承;代表父类的构造函数;
    注意,super虽然代表了父类A的构造函数,但是返回的是子类B的实例;
    即super内部的this指的是B的实例;
    作为 #函数# 时,super()只能用在子类的构造函数之中,用在其他地方(比如实例方法)就会报错。

    image.png

  • 作为super对象来使用, 代表父类对象
    super作为对象在普通方法或者constructor中使用时,指向父类的原型对象;
    因此在普通方法或者constructor中,是无法通过super对象来调用父类实例上的属性和方法的

    image.png

image.png

super作为对象在静态方法中使用时,指向父类;

image.png

在子类的静态方法中通过super调用父类的方法时,方法内部的this指向当前的子类,而不是子类的实例

image.png

由于对象总是继承其他对象的,所以可以在任意一个对象中,使用super关键字

image.png

4、类的 prototype 属性和proto属性

记住两条规则即可:

  • 子类的proto属性,表示构造函数的继承,指向父类(因为class语法表示的是构造函数,而函数自带prototype属性)
    B.__proto__ === A
  • 子类的prototype的proto属性,表示方法的继承,指向父类的prototype(因为class内部的方法都是定义在原型上的)
    B.prototype.__proto__ === A.prototype
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Classk可以通过extends关键字实现继承;这比ES5的通过修改原型链实现继承,要清晰和方便很多; 上面的代...
    吴高亮阅读 1,972评论 0 1
  • 简介 Class可以通过extends关键字实现继承。 上面代码定义了一个ColorPoint类,该类通过exte...
    oWSQo阅读 744评论 0 1
  • 继承6种套餐 参照红皮书,JS继承一共6种 1.原型链继承 核心思想:子类的原型指向父类的一个实例 Son.pro...
    灯不梨喵阅读 3,250评论 1 2
  • 简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。...
    emmet7life阅读 396评论 0 0
  • 基本语法 简介 JavaScript语言中,生成实例对象的传统方法是通过构造函数. ES6提供更接近传统语言的写法...
    JarvanZ阅读 937评论 0 0

友情链接更多精彩内容