继承(super用法)

继承
<script>
  //1.类的继承
  class Father {
    constructor() {
    }
    money() {
      console.log(100);
    }
  }
  class Son extends Father {

  }
  let son = new Son();
  son.money();//100
</script>

存在一个问题,如果子类也有自己的构造函数,同时也想调用父类的求和方法,如果使用下边代码就会报错。下边的new Son时会将计算的参数传给儿子,但是却用父类的求和函数,父类求和函数是需要自己的this,传给了儿子却没传给父亲,直接调用父类方法就会报错。

class Father {
  constructor(x,y) {
    this.x = x;
    this.y = y;
  }
  sum() {
    console.log(this.x+this.y)
  }

}
class Son extends Father {
  constructor(x,y) {
    this.x = x;
    this.y = y;
  }
}
let son = new Son(3,5);
son.sum();
super关键字

用于访问和调用对象父类上的函数,可以调用父类的构造函数,,也可以调用父类地普通函数。

调用父类构造函数
class Son extends Father {
  constructor(x,y) {
  super(x,y);//调用了父类地构造函数
  }
}

加上super(x,y)就可以调用父类地构造函数,执行流程是,new Son后将参数xy首先传给儿子地构造函数,然后又将参数传给super(),super函数又将参数传递给父类构造函数。

调用父类普通函数
//super调用父类的普通函数
class Father {
    say() {
      console.log('我是你爸爸');
    }
}
class Son extends Father{
  say() {
    console.log('我是你儿子');
  }
}
let son = new Son();
son.say();//我是你儿子

1.继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的。

2.继承中,如果子类没有,就会去查找父类有没有这个方法,如果有,就去执行父类的方法,就近原则。

class Son extends Father{
  say() {
    //console.log('我是你儿子');
    console.log(super.say())
  }
}

可以通过super.直接调用父类的普通函数。

super必须放在子类this之前
//子类继承父类加法,同时扩展减法方法
class Son extends Father{
  constructor(x, y) {
    this.x = x;
    this.y = y;
    //利用super 调用父类的构造函数
    super(x,y);
  }

  subtract() {
    console.log(this.x - this.y);
  }
}

上边代码会报错,超类(父类)构造函数之前是不允许有this的,下边才是正确写法。必须先调用父类的构造函数,在使用子类的构造函数。

子类的构造函数调用时,必须先调用构造函数,也就是说子类写了构造函数,必须也有super,且先调用。

constructor(x, y) {
  //利用super 调用父类的构造函数,必须在this之前
  super(x,y);
  this.x = x;
  this.y = y;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值