[关闭]
@windchimes 2019-03-19T02:25:38.000000Z 字数 1136 阅读 269

react中的super

前端知识点总结


super是es6的语法糖,简化了继承的实现,实现了es5里的继承的三个步骤,此三步骤为

1)首先要调用函数的call方法把父类的属性继承过来
2)通过new关键字继承父类原型的对象上的方法和属性
3)手动指定constructor属性指向子类对象
  1. //父类
  2. function sup(name) {
  3. this.name = name
  4. }
  5. //定义父类原型上的方法
  6. sup.prototype.printName = function (){
  7. console.log(this.name)
  8. }
  9. function sub(name,age){
  10. sup.call(this,name) //调用call方法,继承sup超类属性
  11. this.age = age
  12. }
  13. sub.prototype = new sup //把子类sub的原型对象指向父类的实例化对象,这样即可以继承父类sup原型对象上的属性和方法
  14. sub.prototype.constructor = sub //这时会有个问题子类的constructor属性会指向sup,手动把constructor属性指向子类sub
  15. //这时就可以在父类的基础上添加属性和方法了
  16. sub.prototype.printAge = function (){
  17. console.log(this.age)
  18. }
  19. let jack = new sub('jack',20)
  20. jack.printName() //输出 : jack
  21. jack.printAge() //输出 : 20

es6

  1. class sup {
  2. constructor(name) {
  3. this.name = name
  4. }
  5. printName() {
  6. console.log(this.name)
  7. }
  8. }
  9. class sub extends sup{
  10. constructor(name,age) {
  11. super(name)
  12. this.age = age
  13. }
  14. printAge() {
  15. console.log(this.age)
  16. }
  17. }
  18. let jack = new sub('jack',20)
  19. jack.printName() //输出 : jack
  20. jack.printAge() //输出 : 20

react中的constructor中的super,如果用到了constructor就一定要写super,是用来初始化this的,可以绑定事件到this上;
如果在constructor中要使用this.props,则一定要给super传参数:super(props)
无论有没有constructor,在render中都是可以直接使用this.props的,这是react自动附带的;如果没用到constructor,是可以不写的

参考链接:https://segmentfault.com/q/1010000008340434

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注