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许可协议。转载请注明来自 肥林の仓库