es6拾遗

super 关键字

super 这个关键字,既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的用法完全不同。

super 虽然代表了父类 A 的构造函数,但是返回的是子类 B 的实例,即 super 内部的 this 指的是 B,因此 super()在这里相当于 A.prototype.constructor.call(this)。

1
2
3
4
5
6
7
8
9
10
11
12
13
class A {
constructor() {
console.log(new.target.name);
}
}

class B extends A {
constructor() {
super();
}
}
new A(); //A
new B(); //B

第二种情况,super 作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。

加上 static 关键字的方法表示不会被实例继承,而是直接通过类来调用