关于第一个组件化开发(下拉菜单)整体的理解

来源:3-4 用构造函数的形式重写dropdown模块-发送消息、暴露方法以及单例

粉墨登场

2021-01-10 22:40:55

问题描述:

老师你好,第一个组件化开发还剩下3-5、3-6两个视频没有看,其它的视频总时间我算过,大概是3个多小时,但是我却看了19个小时。是的,确实比较难,不好理解,又有封装复用的思想,又有具体内容的修改以及一定的容错能力,内容确实非常多。知道了$.extend可以整合对象,$.proxy可以改变this的指向以及在指定函数内传入参数。像下拉菜单这种非常常见的小组件,一个页面上肯定会涉及到很多,不使用封装而是一个一个写确实不难,但是太多相同或相似的代码,既冗余又浪费性能。因为其实是在重复操作,大家的效果都是大差不差的,因此老师给我们展示了将相同的css样式当作公共的样式,将共性和特性分离开,不同的下拉菜单class类名的前缀是不一样的,封装不同的动画类型和效果,并且将重复的部分要么封装在一个普通函数内,要么添加在对象上当作一个方法去使用。但是这些都是暴露在全局作用域内的呀,没有私密性,所以何谈封装细节?因此老师在showHide.js 和dropdown.js 中都使用了$.fn.extend()方法,其实这两个函数我的理解就是闭包函数,可以访问到各自在JS代码中的其它函数,又因为是添加在jQuery原型对象上的方法,因此可以被jQuery对象使用。所以调用关系是这样的:在HTML文件中调用的函数是在dropdown.js中通过$.fn.extend()的添加的dropdown函数,这个函数又访问到了在其相同页面中的Dropdown这个构造函数,这个构造函数中通过原型对象添加的show和hide函数又访问了在showHide.js代码中通过$.fn.extend()添加的showHide函数,showHide函数又访问了在其页面中的具有各种动画类型和效果的对象。这里可以看出其实是非常复杂的,其中具体内容的处理,参数的传递、接收、处理,构造函数中的this指向和事件的this指向重叠问题、默认的动画类型和效果的定义及使用指点动画类型和效果的参数的合并处理。在一个匿名函数内自执行,相同页面中再通过原型方法添加函数使得可以调用这个局部的函数,再在其它页面中引入文件,再调用。如此反复就封装了一个组件。其实如果要全部记住里面的全部细节确实不大可能,但是体会其中的思想,并且形成自己对组件化一个最初步的认识是最重要的。这个过程中其实有点痛苦,看不懂,暂停,看着视频中的代码思考为什么这么做以及为什么可以这么做,自己再去开一个新的文件按照自己理解过后的思路边写注释边写代码,写完再跟老师写的代码比对并且体会其中的思想。真正弄懂之后发现感觉开辟了一个新的世界,那种感觉很美妙。原来老师要教给我们的思路是如此逻辑严谨、经得起推敲。视频里的老师我不得不说确实技术很厉害,细节处理很到位,考虑得也很周到,想到了要给调用者最大的便利,增加了容错性。 如果组件化的思想真正掌握了就已经不是一个初学小白了。 最后请老师仔细看一下我说的这些,有哪里是有问题的? 还有一个问题就是:后面的组件化开发是否跟这个下拉菜单的组件化思想是一样的?只是具体的细节内容和处理不一样呢?

写回答

2回答

好帮手慕久久

2021-01-11

同学你好,理解的是对的,给同学一个赞,非常棒!有一点需要补充,Dropdown这个构造函数是在初始化_init函数中,对showhide方法进行初始化的:

http://img.mukewang.com/climg/5ffbc578098dd04d06480199.jpg

所以才能在 Dropdown.prototype.show这个函数中,调用相应的动画。

http://img.mukewang.com/climg/5ffbc5a1097489bf06310163.jpg

整个组件化的内容是非常难的,哪怕工作了一两年也可能写不出来这样的代码。视频中的讲师是非常厉害的一线大牛,他在准备这个课时,也是花费了很多时间和心思的。所以同学能看懂这些,真的很厉害。如果能写出这样的代码,那么技术水平就可以实现质的突破,就不再是初级程序员了。

后面的课程思路是一样的,都是先写出简单的实现,再细化、添加功能,封装抽离实现复用,具体实现上可能稍有区别。

同学掌握的这些,就算是对组件化有了一个大体的认识了,而且认识的程度也较深了。我相信这些内容,对同学以后的开发是有帮助的。

祝学习愉快!

0

粉墨登场

提问者

2021-01-10

老师还有一点,我以上说的这些我自己的理解,是否算是对组件化有了一个粗浅的认识以及是否是真的理解了这种组件化的思想呢??

0

0 学习 · 14456 问题

查看课程