JavaScript 编码原则 上 | 青训营

74 阅读3分钟

JavaScript 编码原则之各司其责

(推荐书目:犀牛书 红宝书)

写好JavaScript的一些基本原则:

  1. 各司其责:让HTML、CSS和JavaScript职能分离
  2. 组件封装:好的UI组件具备正确性、拓展性、复用性
  3. 过程抽象(还有一种抽象叫数据抽象):应用函数式编程思想,可以让代码有更好的拓展性和复用能力

例子一 夜间模式 与 白天模式的实现

实现方式一

夜间模式实现一.jpg

实现方式二

夜间模式实现二.jpg

  • 相较于第一种方法的优势

​ 没有通过JavaScript直接操作样式,而是通过JavaScript控制类名来实现状态的切换,提高了代码的可读性和维护性

实现方式三

夜间模式实现三.jpg

label实现🌞与🌜切换的细节:

#modeBtn::after {
  content: '🌞';
}

#modeCheckBox:checked + .content #modeBtn::after {
  content: '🌜';
}
  • 相较于第二种方式的优势

​ 实现了零JavaScript的方案,做到了各司其职的原则(即HTML:结构,CSS:表现,JavaScript:行为)(当然并不强求零JavaScript的方案,而是条件允许的情况下,可以适当地去达到该目标)

结论

结论.jpg

JavaScript 编码原则之组件封装

组件是指Web页面上抽出来的一个个包含模板(HTML)、功能(JS)和样式(CSS)的单元,好的组件具备封装性、正确性、扩展性、复用性

例子二 轮播图的实现

第一版实现
  • 预期效果

轮播图效果.jpg

最基本的实现方式
  • 轮播图结构(HTML)

轮播图结构.jpg

  • 轮播图表现(CSS)

轮播图表现.jpg

  • 轮播图行为(JavaScript)

轮播图行为.jpg

分别提供了 1. 获取选中的对象(object) 2. 获取选中对象的索引(index) 3. 滑动至第xx轮播页 4. 滑动至下一轮播页 5. 滑动至上一轮播页

轮播图行为-控制流.jpg

提供了使用左右箭头翻页 及 红色小圆点进行跳转页面的功能

由于圆点是否为红色(选中状态)与当前轮播图选中的页面,存在着关系,即两者的状态存在着联系,这种情况通常采用自定义事件来解耦

  • 实现总结

轮播图实现总结.jpg

  • 存在的问题
    • 灵活度较低,不能实现控件的可选(即我可以选用 也可以不选用 小红点等控件的翻页功能)
    • constructor(构造方法)过长,对维护和可读性产生了较为不利的影响
第二版实现(插件化)

轮播图优化插件化.jpg

  1. 通过将控制元素抽取成插件,实现了控制元素的可选用化
  2. 通过依赖注入有效地简化了constructor, 将插件剥离出来
  • 存在的问题
    • 控制元素的选用只实现了功能的选用,而没有实现控制元素html(结构)的选用,若要彻底不选用某个控制元素,还需对html代码进行更改
    • 灵活度仍有缺失,若需要更改轮播图的页数,仍需对HTML代码进行修改
第三版实现(模板化)

轮播图优化HTML模板化.jpg

HTML模板化:通过render函数返回要求的需要的HTML(结构)代码,更好地实现了元素的选中(解决了上一版,选中与否还需要更改HTML代码的问题),也提高了灵活度,可以更灵活地定义轮播图地内容了

第四版实现

在之前三版的基础上,仍有进一步优化的控件,这一版我们将组件通用模型抽象出来

轮播图优化组件通用模型抽象.jpg

  • 经过四版优化后总结

轮播图优化后总结.jpg

其实还是存在不少可改善的空间的,比如最后一版中,无论控制元素选用与否,它的CSS(样式)代码都是一直不变的(留在最终代码中的),我们可以通过CSS的模板化来优化与解决这个问题

注:文中使用的图片引用了 月影 老师的课件,十分感谢!若有侵权,请联系我,将第一时间删除