ES6中的继承以及class中的get和set和class类中的this指向问题
继承
ES6中的class可以看作是一个语法糖,他的绝大部分功能,ES5都 可以做到,新的class写法只是让对象原型的写法更加的清晰,更加的面向对象编程的语法而已继承顾名思义就是低级向高级获取东西,在ES6中新增一些继承的关键字,用于简化class类的操作
ES5继承
基本思想:利用原型链糖一个引用类型继承另一个引用类型的属性和方法(即通过prototype和构造函数实现)实质:将父类添加到prototype原型对象上;
ES6继承:
基本思想:通过exttends关键字实现继承,资料类可以继承父类中所有的方法和属性,子类必须在constructor方法中调用super方法,因为新建的子类没有自己的this对象,而是继承了父类的this对象;实质:利用extends关键字继承父类,然后继承父类的属性和方法
extends关键字
使用:
- 解决了代码的
复用性; - 使用
extends关键字实现继承 - 子类可以继承父类中所有的方法和属性;
- 子类只能继承一个父类(单继承),一个父类可以有多个子类
- 子类的构造方法中必须有
super()来指定调用父类的构造方法,并且位于子类构造方法中的第一行, - 子类中如果与父类相同的方法和属性,将会优先使用子类的(覆盖)
代码展示:
<script> |
结果展示:

super关键字
super关键字在类中有两种完全不同的表现形式:
1、代表函数时使用
ES6 要求,子类的构造函数必须执行一次super函数。代表父类的构造函数。作为函数时,super()只能用在子类的构造函数之中,用在其他地方就会报错。- 我们都知道,子类在
继承父类的时候是存在有函数重写这一说法的,也就是说,当我们在子类当中调用构造函数的时候就会覆盖掉我们从父类当中继承过来的构造函数,父类的构造函数不执行,这时的子类就不能从父类中继承属性或方法了,因此我们需要重新调用一下父类的构造函数,也就是重新调用一次super(父类中内置的属性)来重新激活父类的继承
代码展示:
<script> |
结果展示:

class中的get和set
- 与
ES5一样, 在Class内部可以使用get和set关键字, 对某个属性设置存值函数和取值函数, 拦截该属性的存取行为。 get和set通常用于对象的属性方法的绑定get:当对目标对象的某一个属性或者方法进行获取时来去执行get绑定的一个函数set:当对目标对象的某一个属性或者方法进行设置时来去执行set绑定的一个函数
代码展示:
<script> |
结果展示:

class中的this的指向问题
- 1.在
ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象,也就是说,必须要现class创建对象,才能new调用对象 - 2.类里面的共有属性和方法一定要加
this使用. - 3.类里面的
this指向问题:constructor里面的this指向实例对象, 方法里面的this指向这个方法的调用者
代码展示:
<body> |
结果展示:

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库





