super关键字有两种使用场景
1、当用作方法时
在ES6的构造函数中,ES6的语法规定,在继承于父类的子类的构造函数中,必须使用super(),因为在子类中是不存在上下文指向(this)的,需要使用super()继承父类的构造函数,在此,super()代指的是父类的构造函数,但是super()返回的是子类的上下文(this),加入B继承于A,那么super()就相当于 A.prototype.constructor.call(this, props)
class A {}
class B extends A {
constructor() {
super()
}
}
2.当做对象使用时
class A {
fn(){
return 100
}
}
class B extends A {
console.log(super.fn) //100
}
在子类中使用super对象时,相当于父类的原型链,即super.fn==A.prototype.fn,在子类中使用super调用父类的函数时,super会绑定子类的this为被调用方法的上下文对象,即默认执行了super.fn.call(this)
注:在调用super时,必须显示指定super是作为函数还是对象使用,比如,console.log(super)会报错,因为super的数据类型不明确