番外:菜鸟如何读优秀 JS 开源项目之“2048”
来源:互联网 发布:鳄鱼毒品知乎 编辑:程序博客网 时间:2024/05/01 19:34
前戏
今天心血来潮,和朋友突然想到要看一下那个大名鼎鼎的 2048
源码。
在 github 找到分支最多的 2048
开源项目,下载下来,就可以用自己最喜爱的编辑器看其源代码了。
2048-master\. |----js\. |----meta\. |----style\. |----.gitignore |----.jshintrc |----CONTRIBUTING.md |----favicon.ico |----index.html |----LICENSE.txt |----Rakefile |----README.md
我和朋友都是菜鸟,打开 js
文件夹,markdown!这么多 js 文件,怎么看啊。
2048-master\js\. |----animframe_polyfill.js |----application.js |----bind_polyfill.js |----classlist_polyfill.js |----game_manager.js |----grid.js |----html_actuator.js |----keyboard_input_manager.js |----local_storage_manager.js |----tile.js
世上无难事,只怕你放弃。我还是硬着头皮从头到尾看了一遍,心中大呼:
这代码真他 markdown 的优秀,虽然我不知道啥叫优秀的代码。
筛选
在 html 中的引入顺序是这个样子的:
<script src="js/bind_polyfill.js"></script> <script src="js/classlist_polyfill.js"></script> <script src="js/animframe_polyfill.js"></script> <script src="js/keyboard_input_manager.js"></script> <script src="js/html_actuator.js"></script> <script src="js/grid.js"></script> <script src="js/tile.js"></script> <script src="js/local_storage_manager.js"></script> <script src="js/game_manager.js"></script> <script src="js/application.js"></script>
难道就是按这个顺序读吗?
No! 诸如此类的定义,就可以先略过去了。
XXX = function (XX) { ...... }; // 这个是函数、类、方法的定义XXX = { ...... }; // 这个是对象的定义
去掉这些,只剩 3
个文件了有木有,顿时感觉前途一片光明啊:
|----animframe_polyfill.js |----classlist_polyfill.js |----application.js
初探
前两个文件是写在闭包
中的,就可以说这三个文件之间的变量没什么好冲突的,咱就一个一个的看。
当看完 animframe_polyfill.js
的时候,我都有一种小高潮的感觉,嘻嘻。
代码包含空行,总共 29 行。包括两个变量定义、一个循环、两个判断。
就是为了实现,将 chrome 中的 webkitRequestAnimationFrame
和 firefox 中的mozRequestAnimationFrame
赋值给window.requestAnimationFrame
统一来使用,而对于不支持window.requestAnimationFrame
的浏览器,就给他定义一个方法吧。
虽然定义函数也很简单,但为了咱能尽快读完这个项目,就先把定义略过去吧。
同理,classlist_polyfill.js
中一些7788的东西,略!
入口
转眼,咱们来到了仅剩的一个文件 application.js
。
这个文件带空行和注释,中共 5 行,如此简单,这就是走进新世界的入口了。
入口通过 animframe_polyfill.js
中定义的window.requestAnimationFrame
,调用了game_manager.js
中的GameManager
类,并实例化,同时作为参数,分别调用了 keyboard_input_manager.js
中的 KeyboardInputManager
类、html_actuator.js
中的HTMLActuator
类、local_storage_manager.js
中的fakeStorage
对象。
于是,一个神奇的调用网络,就诞生了。
深入
这里提到了 4 个类/对象,每个类/对象放在一个文件中,通过文件名、类/对象名都能联想到它起到的作用,这就让我们感到非常舒服。
接下来,你可以画一张思维导图,列出类中所有的方法名以及之间的调用。
结语
草草结束,希望能给你带来帮助。如果有幸能成为“大神”,我希望能写一篇大神如何读优秀 JS 开源项目
。
- 番外:菜鸟如何读优秀 JS 开源项目之“2048”
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目
- 如何发现优秀的开源项目
- 如何发现优秀的开源项目?
- 如何发现优秀的开源项目
- 如何发现优秀的开源项目?
- Android开源之优秀项目篇
- 优秀开源项目之五:茶绘君
- 从0开始学习 GITHUB 系列之「如何发现优秀的开源项目?」
- GitHub自学系列之七「如何发现优秀的开源项目?」
- 从0开始学习 GITHUB 系列之「如何发现优秀的开源项目?」
- 斐波那契序列程序优化
- PCB设计资料:看到最后才知道是福利
- 老城里斯本简介
- HDU 3255 Farming(线段树求体积并)
- 解决Firefox 27中AutoProxy不能订阅代理规则的方法
- 番外:菜鸟如何读优秀 JS 开源项目之“2048”
- 链表的基本操作
- 数据结构之双链表的基本操作
- linux系统下安装samba,和简单网络配置 .
- LabVIEW上位机与串口通信
- 各种排序算法时间复杂度
- 低功耗蓝牙的基础
- Source Insight 3.X utf8支持插件
- cookie相关