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
  }             
}

 

posted @ 2018-10-09 18:00  Pomm  阅读(721)  评论(0编辑  收藏  举报