跟着月影学 JavaScript(二)| 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4天

前言

上次记录到js语法原则的各司其职,这次继续上次的课程内容记录

组件封装

组件是指web页面上抽出来的一个个包含模板(HTML)、功能(JS)和样式(CSS)的单元,好的组件具备封装性、正确性、扩展性和复用性。虽然现在由于有很多优秀的组件存在,往往我们不需要去自己设计一个组件,但我们也要去试着了解他们的实现。

例子:

image.png

结构:HTML中的无序列表(ul)

轮播图是典型的列表结构,可以用无序列表(ul)元素来实现,每个图放在一个li标签中。

表现:CSS 绝对定位

使用CSS的绝对定位,将图片重叠在一个位置

切换状态使用修饰符(modifier)

轮播图切换动画使用CSS transition 实现

行为:JS

API设计应保证原子操作,职责单一,满足灵活性

ps:原子操作就是指 不可中断的一个或一系列操作,比如操作系统中的原语wait、read等。
封装一些事件:getSelectedItem()、getSelectedItemIndex()、slidTo()、slideNext()、slidePrevious()……

更进一步:控制流,使用自定义事件来进行解耦。

总结:组件封装需要注意其结构设计、展现效果、行为设计(API、Event等)是否达标

思考:如何来改进这个轮播图?

重构1:插件化,解耦

  • 将控制元素抽取成一个个插件(左右小箭头、底下的四个小圆点)等等

  • 插件与组件之间通过依赖注入方式建立联系、

image.png

这样的好处?组件的构造器做的工作就只是将组件们一一注册了,日后复用的时候不需要的组件直接将构造器注释掉即,无需关注其他的。

重构2:模板化

将html也模板化,做到只需一个 <div class='slider‘></div> 就能实现图片轮播,修改控制器的构造,传入图片列表。

image.png

重构3:抽象化

将通用的组件模型,抽象出来一个组件类(Component),其他组件类通过继承该类并实现其render方法。

image.png

总结

image.png

过程抽象

  • 处理局部细节控制的一些方法
  • 函数式编程思想的基础应用

image.png

例子:操作次数限制

  • 一些异步交互
  • 一次性的HTTP请求

image.png