最近在开发中见到了super,但是对这块不是很清楚,所以学习了一下,并进行一个小小的总结,方便自己再度加强记忆,也方便小伙伴们一起查询。
因为也是学习过程,如果文中有理解错误的地方,请评论区中指正,十分感谢
1.super的概念
在MDN中对super的定义如下:
super关键字用于访问和调用一个对象的父对象上的函数。
super.prop和super[expr]表达式在类和对象字面量任何方法定义中都是有效的。
其实我理解就是super
关键字可以用在类和对象里面,并且可用于访问父类/父对象的构造函数和方法
2.super的几种应用
2.1 super在类中调用构造函数
class Polygon {
constructor(height, width) {
this.name = 'Rectangle';
this.height = height;
this.width = width;
}
static sayName() {
console.log('Hi, I am a ', this.name + '.');
}
}
class Square extends Polygon {
constructor(length) {
// ReferenceError,super 需要先被调用!
this.color = 'red';
// 这里,它调用父类的构造函数的, 作为Polygon 的 height, width
super(length, length);
// 在这可以使用this,注意:在使用this之前, 必须先调用super()。
this.color = 'red';
}
}
在这里要强调的是:在构造函数中使用时,super必须在this之前使用,这点要牢记。
这是因为:ES6的继承,需要先创建父类的this,子类调用super继承父类的this对象,然后再加工。
换句话说,子类没有自己的this对象,而是继承父亲的this对象,然后进行加工。如果不调用super,子类就得不到this对象。
2.2 super在类中调用静态方法
class Rectangle {
static logNbSides() {
<