首页 > 语言 > JavaScript > 正文

ES6 class类链式继承,实例化及react super(props)原理详解

2024-05-06 15:44:31
字体:
来源:转载
供稿:网友

本文实例讲述了ES6 class类链式继承,实例化及react super(props)原理。分享给大家供大家参考,具体如下:

class定义类是es6提供的新的api,比较直观,class类继承也有着一定的规律性,在egg, webpack等库的源码中有着很多的应用场景。结合一些初学者可能遇到的难点,本文主要对其链式继承进行总结,关于super关键字的使用请参考我的其他文章es6中super关键字的理解。

class定义

class App {  constructor(options){    super() //报错    //console.log(options)  }} class AppChild extends App{  getConfig(){    console.log('获取config')  }}

class定义类时,constructor不是必须的,可以省略

直接定义类时,不能再constructor中使用super()

class 链式继承

1,省略constructor:

class App {  constructor(options){    console.log(options)  }} class AppChild extends App{  getConfig(){    console.log('获取config')  }} class AppGrandson extends AppChild{  getTime(){    console.log('获取config')  }} new AppGrandson({name:'ceshi'})

在对类进行实例化时,会逐级执行每个类的的constructor,如果类没有constructor,会去查找继承的类,在上层类实例化完毕之后(直到最顶层),再返回执行类的实例化。

看到这里是不是想起什么,是不是很像一些中间件的执行过程,先进入到最底层,执行完后再返回。是的,class类实例化过程类似于洋葱模型,先进后出。

所以上面的代码在最上层的类也能获取到传入的参数。

2,带有super的类继承

class App {  constructor(options){    console.log(options)  }} class AppChild extends App{  constructor(options){    super({      ...options,      age:22    })    this.family = () => {      return {        familyName:'child'      }    }  }  getConfig(){    console.log('获取config')  }} class AppGrandson extends AppChild{  getTime(){    console.log('获取config')  }} new AppGrandson({name:'ceshi'})

上面的代码在中间类添加了super(),super是什么呢,es6提供的关键字,用来继承的,具体用法参见:es6中super关键字的理解

加入super之后,最后顶层获取的options就被super修改了。这是为什么呢,通过调试可以发现,super()执行时,会去执行其所继承类的constructor,当父级类完成初始化之后,才会去执行super()之后的逻辑。

简单的说,super()是父级类实例化的入口

3,模拟实现react中class类,super(props)之后,可以使用this.props

class Component{  constructor(options){    console.log(options)    //这里的this指的是实例化时入口类对应的实例    //在用app进行实例化时,这里的this指的是App实例    this.props = options  }} class App extends Component{  constructor(props){    super(props)//去执行父级类的实例化    console.log(this.props)  }  componentDidMount() {    //...  }}  new App({name:'ceshi'})            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选