ES6类类链式继承,实例化及反应超级(道具)原理详解

  

本文实例讲述了ES6类类链式继承,实例化及反应超级(道具)原理。分享给大家供大家参考,具体如下:

  

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

  

类定义

        类应用{   构造函数(选项){   super()//报的错//console.log(选项)   }   }      类AppChild延伸应用{   getConfig () {   console.log(“获取配置”)   }   }   之前      

类定义类时,构造函数不是必须的,可以省略

  

直接定义类时,不能再构造函数中使用超级()

  

类链式继承

  

<强> 1,省略构造函数:

        类应用{   构造函数(选项){   console.log(选项)   }   }      类AppChild延伸应用{   getConfig () {   console.log(“获取配置”)   }   }      类AppGrandson延伸AppChild {   取得时间(){   console.log(“获取配置”)   }   }      新AppGrandson({名称:'前'})   之前      

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

  

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

  

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

  

2,带有超级的类继承

        类应用{   构造函数(选项){   console.log(选项)   }   }      类AppChild延伸应用{   构造函数(选项){   超级({   选项,   年龄:22   })   这一点。家庭=()=比;{   返回{   familyName:‘孩子’   }   }   }   getConfig () {   console.log(“获取配置”)   }   }      类AppGrandson延伸AppChild {   取得时间(){   console.log(“获取配置”)   }   }      新AppGrandson({名称:'前'})   之前      

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

  

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

  

<强>简单的说,超级()是父级类实例化的入口

  

<强> 3模拟实现反应中类类,超级(道具)之后,可以使用this.props

        {类组件   构造函数(选项){   console.log(选项)//这里的这个指的是实例化时入口类对应的实例//在用应用程序进行实例化时,这里的这个指的是应用实例   这一点。道具=选项   }   }      类应用扩展组件{   构造函数(道具){   超级(道具)//去执行父级类的实例化   console.log (this.props)   }   componentDidMount () {//?   }   }         新应用程序({名称:'前'})   之前      

实例化时,执行到超级(道具),去实例化组合,给this.props赋值,注意这时这里的这个指的是应用程序对应的实例,并不是组件,这是一个关键点。

  

当组件实例化后,再执行console.log (this.props),当然可以获取到值。

  

总结

  

1,类类实例化时,对应的这指向的是最外层类(入口类)对应的实例

  

2,链式继承对应的实例化是洋葱圈模型,先进入到最底层类实例化,再返回

  

3,超类构造函数是类对应的入口,超级(选项)对应的参数就是构造函数对应的参数

  

感兴趣的朋友可以使用:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

  

更多关于JavaScript相关内容可查看本站专题:《JavaScript面向对象入门教程》、《JavaScript错误与调试技巧总结》,《JavaScript数据结构与算法技巧总结》,《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

  

希望本文所述对大家JavaScript程序设计有所帮助。

ES6类类链式继承,实例化及反应超级(道具)原理详解