写好JavaScript | 青训营笔记

80 阅读2分钟

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

感悟摘要

​ 在第三天的js学习中,月影老师给我们讲述了几个小时的前端编程,更准确一点来说更应该是编程。老师传递的思想庞大且成体系。在其中我了解一个好的前端开发不应该是天天揣着demo去写简单的需求,更应该要知道去拓展。将程序结构化、模块化,使其拓展性、维护性、可读性达到最高。这里我引用我在接触ji高级语法时候做的一个前端游戏-别踩白块儿。借助这个例子来展示程序的模块化。

写好JS的原则

  • 各司其责

    能让HTML、CSS和JavaScript职能分离

  • 组件封装

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

    • 结构设计

    • 展现效果

    • 行为设计

      API (功能)

      Event (控制流)

    完成需求后反复思考:这个组件,还有什么改进空间?

  • 过程抽象

    应用函数式编程思想

    • 用来处理局部细节控制的一些方法
    • 函数式编程思想的基础应用

写代码最应该关注什么?

使用场景

按照上述规则,我们一步步实现它。

设计思路将游戏内容使用Block类封装起来,一切游戏行为由Block类来实现。

这一整个Block就是一个游戏模块。体现编程的模块化

这里思考游戏Block主题的特有属性:


constructor(container) {
     this.container = container;     //游戏容器
     this.timer = null;              //计时器
     this.state = false;             //游戏状态
     this.speed = 2;                 //游戏速度
     this.sum = 0;                   //游戏分数
     this.top = -150;                //容器顶部
     this.lastRowChilds = null;      //最后一行
}

结构设计

别踩白块结构.png

行为设计

  • // start() 游戏开始,创建游戏初始状态,开始监听全局
  • // createRow() 创建新行,先创建一行,然后将行添加到container的首子节点,随机生成黑块
  • // move() container移动,通过top控制整个container,使用speed来改变top的值
  • // judge() 判断游戏状态,显示得分;当container到达底部时判断是否存在黑块,是则游戏结束,否则 删除末尾行
  • // flash() 显示得分,在页面中插入分数
  • // clickEvent() 点击监听,监听container容器的点击,在script中调用。
  • // gameOver() 游戏结束,清除定时器,更改游戏状态
  • // again() 重新开始,重置类,同时调用start()

至此整个游戏设计完毕,接下来就是进行行为方法的代码填充,具体实现方法多样。当我们需要更改和阅读游戏主题的代码时,可以直接阅读Block的构造方法,大大提高了代码的可读性,当我们需要更改游戏细节时,可以精准定位到需要更改的位置。