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

38 阅读2分钟

JavaScript 编码原则之各司其责

写好JS的一些原则

各司其职:让HTML、CSS和JavaScript 职能分离

组件封装:好的 UI 组件具备正确性、拓展性、复用性

过程抽象:应用函数式编程思想

深夜食堂——讨论

1、HTML/CSS/JS 各司其职

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

3、可以用 class 来表示状态

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

JavaScript 编码原则之组件封装

组件封装

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

总结:基础方法

1、结构设计

2、展现效果

3、行为设计:API(功能)、Event(控制流)

重构:插件化

解耦

1、将控制元素抽取成插件

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

重构:模板化

解耦

将HTML模板化,更易于拓展

抽象

将组件通过模型抽象出来

总结

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

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

3、三次重构:插件化、模板化、抽象化(组件框架)

JavaScript 编码原则之过程抽象

过程抽象

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

2、函数式编程思想的基础应用

高阶函数

Once

为了能够让“只执行一次”的需求覆盖不同的事件处理,我们可以将这个需求剥离出来。这个过程我们称为过程抽象。

HOF

1、以函数作为参数

2、以函数作为返回值

3、常用于作为函数装饰器

常用高阶函数

Once

Throttle

Debounce

Consumer/2

Iterative

编程范式

总结

1、过程抽象/HOF/装饰器

2、命令式/声明式

Leftpad 事故背景引入

当年的Leftpad事件

事件本身的槽点

function leftpad(str, len, ch) {

str=String(str);

var i=-1;

if(!ch && ch != 0) ch = '';

len = len -str.length;

while (++i<len) {

str = ch + str;

}

return str;

}

1、NPM 模块粒度

2、代码风格

3、代码质量/效率

function leftpad(str, len, ch) {

str = "" + str;

const padLen = len - str.length;

if(padLen <= 0) {

return str;

}

return (""+ch).repeat(padLen)+str;

}

1、代码更简洁

2、效率提升