ES6 extends继承及super使用读书笔记
extends 继承
extends 实现子类的继承
super() 表示父类的构造函数, 子类必须在 constructor中调用父类的方法,负责会报错。
子类的 this 是父类构造出来的, 再在子类的构造函数中进行丰富
class Prosen {
}
class Child extends Prosen {
constructor() {}
}
// const child = new Child()
// console.log(child) ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
此时子类Child没有this,因为没有在构造函数中调用super()函数
ES5继承和ES6继承的区别
ES5 继承, 先创造子类的 this, 再将父类的方法和属性添加到子类的 this上
ES6 继承 先将父类的属性和方法添加到 this上, 子类再通过 super()来获取 this之后改造。
子类实例的创建基于父类实例,只有super方法才能得到父类实例
class Zoo {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
class Dog extends Zoo {
constructor(x,y,z) {
super(x,y)
this.z = z;
}
}
const dog = new Dog(1,2,3)
console.log(dog)
console.log(dog instanceof Dog) // true
console.log(dog instanceof Zoo) // true
super 关键字用法
- 可以当函数使用
- 也可以当对象使用
super 作为函数使用
super 作为函数使用时, 代表父类的构造函数。子类实现继承,必须要执行一次 super()。
super 代表父类的构造函数, 但却返回子类的实例。调用 super()相当于:
A.prototype.constructor.call(this) super(this) 内部的this指向的是子类。
super()函数只能在子类的 constructor函数中使用。
super作为对象使用
super 作为对象使用时, 在普通的方法中指向的是父类的原型对象, 在静态方法指向的是父类。
super作为父类的原型对象, 那么定义在父类实例对象上的属性和方法是无法调用的。
子类通过super对象调用父类原型上的普通方法时, 方法内部的 this指向当前子类实例。
class A {
constructor(){
this.x = 1
}
}
class B extends A {
constructor(){
super()
},
m(){
console.log(super.x) // undefind
}
}
super作为对象在子类的静态方法中使用
子类作为对象在普通方法中指向的是父类的构造函数。 super调用的父类构造函数方法中的this指向子类实例。
子类作为对象在静态方法中指向的是父类。super调用的父类的方法中的this指向的是子类,而不是子类的实例。
super图解

子类的__proto__和prototype.__proto__
class作为构造函数的语法糖, 它同时具有 __proto__和prototype属性。
假设: 父类为A, 子类为B
那么子类(B)的__proto__属性指向父类(A),这表示构造函数的继承
子类的原型对象(prototype)上也有__proto__属性,指向父类(A)的原型对象(prototype),它表示方法的继承。
图解

实例的__proto__
一句话, 实例的__proto__指向子类的原型,实例的__proto__的__proto__就是父类的原型对象。也就是父类实例的__proto__属性。
图解实例__proto__

待更新
ES6 extends继承及super使用读书笔记的更多相关文章
- C++ 的继承与虚函数 读书笔记
一.类与类之间关系: 1.类与类之间可能会存在共性. 2.类与类之间必定会有差异. 3.为也节约开发时间和代码量,我们在设计类时可以把类的共享抽象出来形成一个基础类(基类). 4.使用基类+差异生成一 ...
- ES6读书笔记(二)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...
- ES6 读书笔记
一.let和const命令 二.变量的解构赋值 三.字符串的扩展 四.数值的扩展 五.正则的扩展 六.数组的扩展 七.函数的扩展 八.对象的扩展 九.symbol 十.proxy和reflect 十一 ...
- 《深入理解ES6》读书笔记
文章目录 第一章 块级绑定 1. var 声明与变量提升 2. let 与 var 的区别 第二章 字符串与正则表达式 1.字符串扩展 1.1 includes().startsWith() .end ...
- 通过原型继承理解ES6 extends 如何实现继承
前言 第一次接触到 ES6 中的 class 和 extends 时,就听人说这两个关键字不过是语法糖而已.它们的本质还是 ES3 的构造函数,原型链那些东西,没有什么新鲜的,只要理解了原型链等这些概 ...
- 《C#图解教程》读书笔记之四:类和继承
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.万物之宗:Object (1)除了特殊的Object类,其他所有类都是派生类,即使他们没有显示基类定义. ( ...
- ES6读书笔记(三)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,<ES6读书笔记(二)>,现在为第三篇,本篇内容包括: 一.Promise 二.Iterator和for of循 ...
- ES6读书笔记(一)
前言 前段时间整理了ES5的读书笔记:<你可能遗漏的JS知识点(一)>.<你可能遗漏的JS知识点(二)>,现在轮到ES6了,总共分为四篇,以便于知识点的梳理和查看,本篇内容包括 ...
- 【读书笔记】【深入理解ES6】#4-扩展对象的功能性
对象类别 ES6规范清晰定义了每一个类别的对象. 普通(Ordinary)对象 具有JS对象所有的默认内部行为 特异(Exotic)对象 具有某些与默认行为不符的内部行为 标准(Standard)对象 ...
随机推荐
- vue-cli构建项目在index.html中使用静态文件
在vue-cli构建的项目中,且使用在移动端,我们希望每一个页面加载时都可以使用flexible.js来适配手机. 那么这个flexible.js被import到每一个组件中就不合适了. 好的方法是直 ...
- pat1053. Path of Equal Weight (30)
1053. Path of Equal Weight (30) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue G ...
- HDU 5375——Gray code——————【dp||讨论】
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- springCloud 概念介绍
微服务(Microservice) 那么首先介绍下微服务.微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以 ...
- Weblogic中配置Active Directory Authentication Provider
其要点或者容易出错的关键点是:(<>及其中说明代表需要替换的内容) Host: ads.yourdomain.com Host填AD服务器的域名或IP ...
- js去除重复项
window.onload = function(){ var array = [12, 14,15,17,12,11,12,14,16] alert(del(array)); } function ...
- Spring-cloud学习线路
学习本学习路线学习完,大家将会对微服务.Spring Cloud.Docker.Kubernetes有一个系统.全面的认识.通过学习,将能掌握相关的知识体系,并能够投入到项目实战中去. 本学习路线采用 ...
- 在CentOS上配置Tomcat服务脚本
#!/bin/bash # chkconfig: - 85 15 # description: Tomcat Server basic start/shutdown script # processn ...
- >>我要做特工系列 之 CSS 3_animation_向右滑出后下滑并停止
新手入门还没有正式发点啥东西,都是在装潢博客这个家了,到现在为止还是没有装修好..熟悉了这边的发布规范之后会持续在这里记录,给自己留下学习的脚印~ 这正式的第一篇随笔写个使用css3的动画效果. 总感 ...
- 1像素border
1像素border 利用伪类和媒体查询: 伪类: border-1px($color) position:relative &:after display: block position: a ...