-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试官:super()和super(props)有什么区别? #184
Comments
_aSDasdf_**** |
12
|
说的有点问题, |
不管调不调用super()this还是可以指向当前对象,只是调用super,可以继承父类属性,之所以报错是因为预防调试出错。 |
父组件的属性作为他原型对象上的属性,当自己属性上不存在时,才会去原型上找,实际上this不管super不super都是指向当前对象 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
一、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
内部也会将其定义在组件实例中所以无论有没有
constructor
,在render
中this.props
都是可以使用的,这是React
自动附带的,是可以不写的:但是也不建议使用
super()
代替super(props)
因为在
React
会在类组件构造函数生成实例后再给this.props
赋值,所以在不传递props
在super
的情况下,调用this.props
为undefined
,如下情况:而传入
props
的则都能正常访问,确保了this.props
在构造函数执行完毕之前已被赋值,更符合逻辑,如下:三、总结
在
React
中,类组件基于ES6
,所以在constructor
中必须使用super
在调用
super
过程,无论是否传入props
,React
内部都会将porps
赋值给组件实例porps
属性中如果只调用了
super()
,那么this.props
在super()
和构造函数结束之间仍是undefined
参考文献
The text was updated successfully, but these errors were encountered: