react 中的 super(props) 作用

1、constructor()

这是 ES6 对类的默认方法,通过 new 命令生成对象实例时自动调用该方法。并且,该方法是类中必须有的,如果没有显示定义,则会默认添加空的constructor( )方法。

2、super()

在 class 方法中,子类通过 extends 关键字来继承父类,就必须在 constructor( ) 方法中调用 super( ) 方法,否则新建实例时会报错。报错的原因是:子类是没有自己的 this 对象的,它只能继承自父类的 this 对象然后对其进行加工,而 super( ) 就是将父类中的 this 对象继承给子类。没有 super,子类就得不到 this 对象。

3、出现上面情况的原因是,ES5 的继承机制与 ES6 完全不同。简单解释,就是在 ES5 的继承中,先创建子类的实例对象 this,然后再将父类的方法添加到 this 上( Parent.apply(this) )。而ES6采用的是先创建父类的实例 this(故要先调用 super( ) 方法),完后再用子类的构造函数修改 this。

4、当一个构造函数前加上 new 的时候,背地里来做了四件事:

(1)生成一个空的对象并将其作为 this;

(2)将空对象的 __proto__ 指向构造函数的 prototype;

(3)让构造函数里面的 this 指向这个空对象,并且调用该构造函数,给这个空对象添加属性和方法;

(4)返回这个新对象,所以构造函数里面不需要return(如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回 this;如果 return 一个引用类型,则返回这个引用类型)。

5、super(props)

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

(2)如果你在 constructor 中要使用 this.props,就必须给 super 加参数:super(props);(无论有没有 constructor,在 render 中 this.props 都是可以使用的,这是React自动附带的)

6、为什么不能在 constructor 中直接使用 this.props

其实很简单,因为 this.props 必须要是一个对象,才能在它下面定义属性,而 constructor(props) 方法中 传入的参数 props 为对象,所以 super(props) 的作用就是在父类的构造函数中给 props 赋值一个对象 this.props = props 这样就能在它的下面定义你要用到的属性了,然而其他的由于没有传参就直接赋值为 undefind。


 

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值