本文实例讲述了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类类链式继承,实例化及反应超级(道具)原理详解