es6 class super关键字
super关键字不仅可以当做函数使用,也可以当做对象使用。
1.当函数使用时,通常在子类的constructor即构造方法内
class A{ constructor(x){ this.x = x; } } class B extends A { constructor(x,y){ super(x); this.y = y; } }
在这里,super()作用是,代表调用了父类的构造方法,函数返回了子类的实例。因为子类的构造方法是根据父类构建的,因此this关键字必须在调用super()函数之后使用,否则会报错。并且,子类构造函数内必须调用super()方法。
2.当做为对象使用时,在普通方法中指向父类的原型对象,在静态方法中指向父类。
class A { static k (staMsg) { console.log('A'+staMsg); } constructor(x){ this.x = x; } k () { return 9; } } class B extends A { static k (staMsg) { super.k(staMsg);//调用父类的k方法,此时父类内部this指向子类 } constructor(x,y){ super(x); this.y = x; console.log(super.x);//x是父类实例上的属性,所以访问不到 console.log(super.k); //输出9 } }