前言
在本书中我们先后提到了不少Web开发类书籍,但对于那些想从头开始学习构建完整JavaScript应用的读者来说,市面上真正值得推荐的JavaScript教程又显得十分稀缺。与此同时,现在几乎每一个互联网创业公司的人员配备中都少不了资深JavaScript应用程序开发者的角色。本书旨在帮助人们了解如何构建易于扩展和维护的完整JavaScript应用。
本书并不打算向读者详细讲解JavaScript语言基础,它基于你现有的JavaScript知识结构,向你展示那些会让你的编码工作长久受益的JavaScript特性与技巧。一般来说,随着应用程序的规模不断扩大,添加新功能与缺陷修复开始变得越来越难以下手,代码随之变得脆弱、臃肿,甚至一个非常小的改动都可能带来大范围的代码重构。如果你在编码过程中遵循了本书中介绍的设计模式,你会发现代码开始变得灵活而富有伸缩性,对代码的细微变更不会再对其他模块产生负面影响。
本书的内容主要聚焦在客户端JavaScript应用设计上,同时也会穿插一些较为基础的Node、RESTful API等服务端技术介绍。应用逻辑前端化已经是大势所趋,以往我们常常将模板渲染、与第三方服务通信等任务交给服务端去处理,诸如此类的工作如今通常在浏览器中完成。
事实上,现今的JavaScript应用已经在浏览器中扮演起了传统桌面级应用的角色。当然,这一切仍然离不开服务端的技术支撑,像静态资源托管、动态模块加载、数据持久化、操作日志记录以及第三方API服务调用等,这些都属于服务端的职能范畴。
本书内容涵盖:
面向应用开发者的JavaScript特性与最佳实践。
代码组织、模块化与复用。
· 客户端关注点分离(MVC等)。
· 服务端与API的通信机制。
· 用Node.js设计并实现RESTful API。
· 构建、测试、团队协作、应用部署与扩展。
· 应用工程的国际化。
本书目标读者
具备一定的JavaScript开发基础,有至少1或2年的JavaScript实践经验,并想了解如何使用JavaScript开发大规模Web或企业级应用的开发者。
抱有强烈的学习热情,尤其是对闭包、函数式编程、原型继承这些JavaScript语言独有的强大特性想做了解与尝试的编程入门者。(即使你是第一次听到这些概念。)
也许你想在下一个具有挑战性的JavaScript项目中使用TDD(测试驱动开发)技术,本书所有的代码范例中均包含测试用例。在你读完本书后,代码自测的意识与方法也会随之建立起来。
不太适合本书的读者
本书不面向JavaScript初学者,涉及JavaScript基础技术点的地方会一带而过。如果你想对这些技术点进行深入了解,可以在Douglas Crockford的《JavaScript精粹》(O扲eilly,2008)以及David Flannagan的《JavaScript 权威指南》编注1(O扲eilly,2011)中找到相关解读。由著名的“四人帮”(Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides) 合著的《设计模式:可复用面向对象软件的基础》编注2(http://bit.ly/1pwzcUc)(Addison-Wesley,1994)会帮助你更好地理解设计模式。
Google与维基百科同样是信息查阅的好帮手,对软件设计模式来说,维基百科是一份非常不错的参考资料。
如果这是你第一次接触JavaScript,我建议你在步入正篇之前先把基础功课做足。Marijn Haverbeke所著的《Eloquent JavaScript》(http://eloquentjavascript.net/)(No Starch Press,2011 )是我个人比较喜爱的一本JavaScript入门教程,还有上文中提到的《JavaScript 精粹》,最好每一个章节都通读一遍。另外,特别留意下附录A,这是JavaScript开发前辈们对自己所犯的错误做的系统总结,从中你可以获得一些启发。
单元测试
很难估量单元测试在应用中的重要性,本书中几乎所有的代码样例中均附有单元测试用例。编写测试用例让你对功能实现了解得更为透彻,对方案与接口设计的把握越来越谨慎,设计测试用例的过程同样是迫使你思考将代码解耦的过程。保持编写单元测试与解耦代码的习惯会使你在今后的工作中持续受益,相信在读完本书之后你会收获这种编码习惯。
关于单元测试与编码风格的更多内容,请参见本书附录A。
目录
第1章 JavaScript的革命时代
1.1 JavaScript的特性
1.2 性能
1.3 对象
1.4 语法
1.5 函数是一等公民
1.6 事件
1.7 复用性
1.8 结论
1.9 解构现代JavaScript应用
1.10 基础架构
1.11 JSON ——数据存储与通信
1.12 NoSQL数据库
1.13 RESTful JSON Web Services
第2章 函数
2.1 减少隐式副作用
2.2 函数声明
2.3 lambdas
2.4 立即执行函数表达式
2.5 方法上下文
2.6 函数作用域
2.7 变量提升
2.8 闭包
2.9 方法API的设计
2.10 参数命名
2.11 多态函数
2.12 范型编程与集合多态
2.13 链式调用与流式API
2.14 函数式编程
2.15 无状态函数(纯函数)
2.16 偏函数应用与函数加里化
2.16 异步操作
2.17 回调函数
2.18 Promises与Deferreds
2.19 小结
第3章 对象
3.1 过时的类继承
3.2 流式JavaScript
3.3 原型
3.4 原型代理
3.5 原型克隆
3.6 享元模式
3.7 创建对象
3.8 工厂函数
3.9使用Stamps进行原型继承
3.10 小结