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

103 阅读3分钟

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

本堂课重点内容

  • 如何写好 JavaScript

详细知识点介绍

如何写 JavaScript

写好 JS 的一些原则

  • 各司其职

    • 让 HTML、CSS和 JavaScript 职能分离

    • 应当避免不必要的由 JS 直接操作样式

    • 可以用 class 来表示状态

    • 纯展示类交互寻求零 JS 方案

  • 组件封装

    组件指 Web 页面上抽出来一个个包含模板(HTML)、功能(JS)和样式(CSS) 的单元

    • 组件设计的原则:封装性、正确性、扩展性、复用性

    • 实现组件的步骤

      • 结构设计

      • 展示效果

      • 行为设计

        • API(功能)

        • Event(控制流)

      • 插件化

      • 模板化

      • 抽象化(组件框架)

  • 过程抽象

    即用来处理局部细节控制的一些方法

    • 应用函数式编程思想

    • 高阶函数

      • 以函数作为参数

      • 以函数作为返回值

      • 常用于作为函数装饰器

      • 常用高阶函数

        • Once

        • Throttle

        • Debounce

        • Consumer / 2

        • lterative

    • 编程范式

      • 命令式与声明式

        声明式的编程思想天然的比命令式更有扩展性

实践练习例子

例一:轮播图组件框架的实现

HTML 部分

<div id="my-slider" class="slider-list"></div>

CSS 部分

02_css部分代码.png

JavaScript 部分

03_JS部分代码.png

解析

HTML 结构

轮播图是一个经典的列表结构,我们可以使用无序列表 ul 元素来实现

CSS 表现
  • 使用 CSS 绝对定位将图片重叠在同一个位置

  • 轮播图切换的状态使用修饰符(modifier)

  • 轮播图的切换动画使用 CSS transition

JS 行为

定义一个 Slider 类,在类中实现相应 API

  • Slider

    • getSelectedltem():获取当前选中图片元素

    • getSelectedltemlndex():获取当前选中图片元素在列表中的下标

    • slideTo():slideTo 到特定 Index 的元素上

    • slideNext():轮播下一张图片

    • slidePrevious():轮播上一张图片

    • stop():暂停轮播

    • start():继续轮播

解耦

使用自定义事件来,避免组件状态与图片状态耦合在一起

  • 将控制元素抽取成插件

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

抽象出来的插件

  • pluginController():展示底部轮播控制

  • pluginPrevious():展示上一张图片控制

  • pluginNext():展示下一张图片控制

将 HTML 模板化,更易于扩展

  • render():生成渲染 HTML 模板代码

  • action():完成初始化

抽象

由轮播图组件、插件,将组件通用模型抽象出来

Slider

  • + render()

  • + registerPlugins(...plugins)

  • + getSelectedltem()

  • + getSelectedltemlndex()

  • + slideTo()

  • + slideNext()

  • + slidePrevious()

  • + stop()

  • + start()

SliderPlugin

  • + render(data)

  • + action(component)

得到组件通用模型

Component

  • + registerPlugins(...plugins)

  • + render()

运行结果

01_轮播图组件框架的实现.gif

课后个人总结

本节课跟着月影老师学习的写好 JS 的一些原则,让我对编程思想有了更深层次的理解。同时也让我意识到了自己对 JavaScript 的认识与了解还有着十分多的不足,只有打扎实基础,才能去优化发现自己写的代码的不足。

引用参考

第四届字节跳动青训营「跟着月影学 JavaScript 」课程