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

63 阅读2分钟

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

一、JavaScript编码原则

1. 写好JS的原则

JavaScript编码的三大原则:

  • 各司其职

    • 让HTML、CSS和JavaScript职能分离
  • 组件封装

    • 好的UI组件具备正确性、拓展性、复用性
  • 过程抽象

    • 应用函数式编程思想

2. 各司其职

深夜食堂案例

  • 版本一

image-20230117224455538.png

  • 版本二 image-20230117224608606.png

  • 版本三

image-20230117224703205.png

总结

  • 各司其职

    • HTML/CSS/JS各司其职
    • 应当避免不必要的由JS直接操作样式
    • 可以用class类来表示状态
    • 纯展示类交互寻求零JS方案

image-20230117191051439.png

3. 组件封装

什么是组件

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

轮播图案例

  • 结构 - HTML在·:

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

    • 使用CSS绝对定位将图片重叠在同一个位置
    • 轮播图切换的状态使用修饰符(modifier)
    • 轮播图的切换动画使用CSS transition
  • 行为 - JS:

    • SLider功能(API)

      • +getSelectedItem() 用于获取选中图片元素
      • +getSelectedItemIndex() 用于获取选中图片元素索引
      • +slideTO() 用于轮播至某图片
      • +slideNext() 用于轮播至下一张图片
      • +slidePrevious 用于轮播至上一张图片、
    • 控制流(Event)

      • 使用自定义事件来解耦

案例优化

  • 重构:插件化(解耦)

    • 将控制元素抽取成插件
    • 插件与组件之间通过依赖注入方式建立联系
  • 重构:模式化(解耦)

    • 将HTML模块化,更易于拓展
  • 重构:组件框架(抽象)

    • 将组件通用模型抽象出来

image-20230117231053685.png

image-20230117231219688.png

image-20230117231301029.png 总结

  • 组件设计的原则:

    • 封装性
    • 正确性
    • 拓展性
    • 复用性
  • 组件封装的基本方法

    • 结构设计

    • 展示效果

    • 行为设计

      • API(功能)
      • Event(控制流)
  • 三次重构:

    • 插件化
    • 模板化
    • 抽象化(组件框架)

二、Leftpad 事故背景引入

Leftpad 事件本身的槽点

  • NPM模块粒度
  • 代码风格
  • 代码质量/效率

image-20230117214217750.png

Leftpad 可优化

  • 使用repeat的二次幂处理进行优化

image-20230117214540782.png

三、JavaScript 代码质量优化之路

交通灯案例

  • 实现一个切换多个交通灯状态切换的功能
  • 版本一

image-20230117220526127.png

  • 版本二

image-20230117220158691.png

  • 版本三

image-20230117220045082.png

  • 版本四

image-20230117220849002.png

4的幂案例

  • 版本一

image-20230118000659926.png

  • 版本二

image-20230118000721174.png

  • 版本三

image-20230118000752554.png

  • 版本四

image-20230118000848338.png

洗牌案例

  • 错误版本

image-20230118000920264.png

原因是sort函数排序交换位置不是随机的,因而概率不同
  • 正确版本

image-20230118001136195.png

随机抽出一张牌放入最后,被随机抽到概率均等

洗牌-生成器案例

image-20230118001310974.png

洗牌直接抽取出牌

分红包案例

  • 切西瓜法

image-20230118001533697.png

每次都切大的那块 ---> 能保证够分到所有人
  • 抽牌法

image-20230118001727063.png

均分为n等分,随机取数量分 ---> 不会分的太均匀,极差大