Open zchfeng opened 2 years ago
在ES6中,通过extends关键字实现类的继承,方式如下:
class sup{ constructor(name){ this.name = name } printName() { console.log(this.name) } } class sub extends sup{ constructor(name,age){ super(name) this.age = age } printAge(){ console.log(this.age) } }
在上面的例子中,可以看到通过super关键字实现调用父类,super代替的是父类的构建函数,使用super(name)相当于调用sup.prototype.constructor.call(this,name) 如果在子类中不使用super,关键字,则会引发报错:报错的原因是 子类是没有自己的this对象的,它只能继承父类的this对象,然后对其进行加工,而super()就是将父类中的this对象继承给子类的,没有super()子类就得不到this对象 如果先调用this,再初始化super(),同样是禁止的行为 所以在子类constructor中,必须先调用super才能引用this
在React中,类组件是基于es6的规范实现的,继承React.Component,因此如果用到constructor就必须写super()才初始化this 这时候,在调用super()的时候,我们一般都需要传入props作为参数,如果不传进去,React内部也会将其定义在组件实例中
在React中,类组件基于ES6,所以在constructor中必须使用super 在调用super过程,无论是否传入props,React内部都会将porps赋值给组件实例porps属性中 如果只调用了super(),那么this.props在super()和构造函数结束之间仍是undefined
一、ES6 类
在ES6中,通过extends关键字实现类的继承,方式如下:
在上面的例子中,可以看到通过super关键字实现调用父类,super代替的是父类的构建函数,使用super(name)相当于调用sup.prototype.constructor.call(this,name) 如果在子类中不使用super,关键字,则会引发报错:报错的原因是 子类是没有自己的this对象的,它只能继承父类的this对象,然后对其进行加工,而super()就是将父类中的this对象继承给子类的,没有super()子类就得不到this对象 如果先调用this,再初始化super(),同样是禁止的行为 所以在子类constructor中,必须先调用super才能引用this
二、类组件
在React中,类组件是基于es6的规范实现的,继承React.Component,因此如果用到constructor就必须写super()才初始化this 这时候,在调用super()的时候,我们一般都需要传入props作为参数,如果不传进去,React内部也会将其定义在组件实例中
三、总结
在React中,类组件基于ES6,所以在constructor中必须使用super 在调用super过程,无论是否传入props,React内部都会将porps赋值给组件实例porps属性中 如果只调用了super(),那么this.props在super()和构造函数结束之间仍是undefined