如何学好JS(上) | 青训营笔记

50 阅读2分钟

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

写好JS的原则

让HTML、CSS和JS职能分离。

JS是行为,CSS是表现,HTML是结构,结构表现行为分离。JS不应直接控制CSS的内容。可以利用class表示状态,来连接JS与CSS。在主要展示样式的情况下,可以尽量减少JS的使用

例子:更改页面背景颜色

btn.addEventListener('click', (e) => {
  const body = document.body;
  if(e.target.innerHTML === '🌞') {
    body.style.backgroundColor = 'black';
    body.style.color = 'white';
    e.target.innerHTML = '🌜';
  } else {
    body.style.backgroundColor = 'white';
    body.style.color = 'black';
    e.target.innerHTML = '🌞';
  }
});
btn.addEventListener('click', (e) => {
  const body = document.body;
  if(body.className !== 'night') {
    body.className = 'night';
  } else {
    body.className = '';
  }
});

从第一种变到第二种,好处在于:首先,代码变少了,JS可以只对className进行操作,就能改变页面背景,具体的样式更改在CSS中完成,符合各司其职的原则。第一种代码虽然也能完成页面背景转换,但是JS直接对样式进行了操作。这样做会可读性变差,可能不只其他程序员读不懂,半年之后的自己也读不懂。

再分离的更彻底一点:只使用CSS就能实现该功能(加入checkbox)

  width: 100%;
  height: 100%;
  max-width: 600px;
  padding: 0;
  margin: 0;
  overflow: hidden;
}

body {
  box-sizing: border-box;
}

.content {
  height: 100%;
  padding: 10px;
  transition: background-color 1s, color 1s;
}

div.pic img {
  width: 100%;
}

#modeCheckBox {
  display: none;
}

#modeCheckBox:checked + .content {
  background-color: black;
  color: white;
  transition: all 1s;
}

#modeBtn {
  font-size: 2rem;
  float: right;
}

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

#modeCheckBox:checked + .content #modeBtn::after {
  content: '🌜';
}

image.png

组件封装

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

例子:电商轮播图

基本方法

  • 结构设计

  • 展现效果

  • 行为设计

    1. API (功能)
    2. Event (控制流)

如何改进: 三次重构

1. 插件化:解耦
  • 将控制元素抽取成插件
  • 插件与组件之间通过依赖注入方式建立联系
2. 模板化
  • 将HTML模板化,更易于扩展
3. 抽象化(组件框架)
  • 将组件通用模型抽象出来