如何理解react中的super(),super(props) - Go语言中文社区

如何理解react中的super(),super(props)


1.constructor( )-----super( )的基本含义

 

 

constructor( )——构造方法

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

 

super( ) ——继承

      在class方法中,继承是使用 extends 关键字来实现的。子类 必须 在 constructor( )调用 super( )方法,否则新建实例时会报错。

 

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

 

2.Es5-----Es6关于继承的实现不同之处

 

  出现上面情况的原因是,ES5的继承机制与ES6完全不同。

复习一个重要知识点——ES5中new到底做了些啥?


当一个构造函数前加上new的时候,背地里来做了四件事:
1.生成一个空的对象并将其作为 this;
2.将空对象的 __proto__ 指向构造函数的 prototype
3.运行该构造函数;
4.如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。

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

 

3.super(props)------super()-----以及不写super的区别

 

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

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

   (无论有没有constructor,在render中this.props都是可以使用的,这是React自动附带的;)

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

 

 

 

用es6的class(类)的方法创建组件:

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

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

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

这是为什么呢?

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

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

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

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

转载于:https://www.cnblogs.com/itgezhu/p/11199313.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_30725467/article/details/97926786
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢