如何写好JS | 青训营笔记

71 阅读3分钟

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

如何写好JS

写好JS的一些原则

  • 各司其职
    • 让HTML、CSS和JS职能分离
  • 组件封装
    • 好的UI组件具备转正确性、扩展性、复用性
  • 过程抽象
    • 应用欧冠函数式编程思想

各司其职

思考:写一段JS,控制一个网页,让它支持浅色和深色两种浏览模式,应该怎么实现?

版本一 这个版本有什么问题?怎么优化

05跟着月影写JS_01.png

版本二 这个版本比上一版好在那里,还有没有其他方案

05跟着月影写JS_02.png

版本三(无JS---利用CSS的高级功能)

05跟着月影写JS_03.png

结论:

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

组件封装

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

好的组件具备封装性、正确性、扩展性、复用性

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

05跟着月影写JS_04.png

  • 表现CSS
    • 使用CSS绝对定位将图片重叠在同一个位置
    • 轮播图去诶换的状态使用修饰符(modifier)
    • 轮播图的切换动画使用CSS transition

05跟着月影写JS_05.png

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

05跟着月影写JS_06.png

  • 控制流:使用自定义事件来解耦

05跟着月影写JS_07.png

  • 总结基本方法

    • 结构设计
    • 展现效果
    • 行为设计
      • API(功能)
      • Event(控制流)
  • 重构:插件化

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

    • 将HTML模板化,更易于扩展

05跟着月影写JS_010.jpeg

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

05跟着月影写JS_011.jpeg

  • 封装流程:

  • 总结

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

  • 实现组件的步骤:结构设计、展现效果、行为设计

  • 三次重构

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

过程抽象

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

  • 函数式编程思想得到基础应用

  • 例子

    • 操作次数限制
    • 一次性的HTTP请求
  • Once

    • 为了能够让"只执行一次"的需求覆盖不同的事件处理,可以将这个需求剥离出来,这个过程称为过程抽象
  • 高阶函数(HOF)

    • 以函数作为参数
    • 以函数作为返回值
    • 常用于作为函数装饰器
  • 常用高阶函数

    • Once
    • hrottle(节流函数)
    • Debounce(防抖)
    • Consumer(延时)
    • Consumer(2)
    • Iterative
  • 为什么要使用高阶函数 纯函数(没有副作用,结果可预期)

  • 编程范式

    • 命令式---How
    • 声明式---What---可扩展性强
    • 例子
      • Toggle-命令式
      • Toggle-声明式
      • Toggle-三态
  • 总结

    • 过程抽象/HOF/装饰器
    • 命令式/声明式

写代码最应该关注什么

  • 风格
  • 效率
  • 约定
  • 使用场景(!)
  • 设计

代码质量优化之路

交通灯

  • 版本一
  • 版本二(数据抽象)
  • 版本三(过程抽象)
  • 版本四(异步+函数式)

判断是否是4的幂

洗牌

错误写法

正确写法

生成器

分红包

版本一(切西瓜法)

版本二(抽牌法)