为什么react的组件要super

新手上路,请多包涵

为什么react的组件要supe

阅读 1.6k
2 个回答

这是 ES6 语法中,子类调用超类的构造函数的方式。
如果以混合寄生方式实现继承:

// 超类
function Super(a){
    this.a = a;
}

// 子类
function SubClass(a){
    // 不执行这两句调用超类的构造函数的话,
    // 子类实例的 this.a 就是 undefined
    var super = Super.bind(this);
    super(a);
}
// ... 省略无关本题的代码

看起来是不是有内味了?ES6 规范当然也可以规定用其他方法来调用超类的构造函数,比如默认以子类的参数列表来调用,但这样一来,子类的参数列表就必须兼容超类的参数列表。

题主问的难道是“React class组件的constructor方法内为啥必须调用super方法”?
这个是ES2015 class的语法规则,即:

如果子类定义了constructor方法,则必须在子类的constructor方法中调用父类的构造方法(即使父类没有显示的定义constructor方法),并且super语句必须在this引用之前。
class A{
}

class B extends A {
    constructor(){        
    }
}
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
var b = new B();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题