我是靠谱客的博主 奋斗楼房,最近开发中收集的这篇文章主要介绍React中super(props)和super()以及不写super()的及ES6和ES5的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、constructor和super的基本含义

constructor() – 构造方法

这是es6中的类的默认方法,通过new命令生成对象实例自动调用的方法。

并且,该方法是类中必须要有的,如果没有显示定义,则会默认添加空的constructor()方法。

super() – 继承

在class方法中,继承是使用extends关键字来实现继承的。

子类必须在constructor()中调用super()方法,否则新建实例时会报错。

报错的原因是,子类是没有自己的this对象的,它只能继承父类的this对象,然后对其进行加工,而super()就是将父类中的this对象继承给子类的。

没有super,子类就得不到this对象。

二、ES5和ES6关于继承的实现不同之处

在ES5中,当一个构造函数前面加上new的时候,其实一共做了四件事:

1.生成一个空的对象并将其作为this

2.将空对象的__proto__指向构造函数的prototype

3.运行该构造函数

4.如果构造函数没有return或者return一个返回this值是基本类型,则返回this,如果return一个引用类型,则返回这个引用类型

简单解释,就是在ES5的继承中,先创建子类的实例对象this,然后再将父类的方法添加到this上,而ES6采用的是先创建父类的实例this(故要先调用super()方法),然后再用子类的构造函数修改this。

三、super(props) —— super() —— 以及不写super()的区别

如果你用到了constructor就必须写super(),是用来初始化this的,可以绑定事件到this上

如果你在constructor中要使用this.props,就必须给super加参数,super(props)

注意: 无论有没有constructor,在render中this.props都是可以使用的,这是react自动附带的)

如果没用到constructor,是可以不写的,react会默认添加一个空的constructor

总结

子类继承父类的属性:需要使用super()继承父类的属性,同时创建this(子类本身没有this);

如果像上图一样需要定义props的属性 this.props.name=“哈哈”,则需要用 super(props)

如果不定义props的属性,只定义状态this.state ,就可以直接super();

这是为什么呢?

其实很简单,因为this.props必须要是一个对象,才能在它下面定义属性

而constructor(props){}传入的参数props为对象

所以super(props)的作用就是在父类的构造函数中给props赋值一个对象

this.props=props这样就能在它的下面定义你要用到的属性了,

然而其他的由于没有传参就直接赋值为undefind

由于state下面没有属性,所以如果只是定义state就可以直接super()就行了

文章转载: https://zhuanlan.zhihu.com/p/123548377

最后

以上就是奋斗楼房为你收集整理的React中super(props)和super()以及不写super()的及ES6和ES5的区别的全部内容,希望文章能够帮你解决React中super(props)和super()以及不写super()的及ES6和ES5的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部