第1章 面向对象的JavaScript 1
1.1 JavaScript中的对象 1
1.1.1定制对象 1
1.1.2类 2
1.2代码规范和命名 22
1.2.1规则1:使用描述性的名字 22
1.2.2规则2:以小写字母开头 23
1.2.3规则3:使用骆驼命名法来分割单词 23
1.2.4规则4:全局常量使用全大写的名字 23
1.2.5规则5:集中在一个语句中声明函数体的所有变量并将其置于函数体顶部 24
1.3 ECMAScript 5 26
1.3.1 JSON数据格式解析 27
1.3.2严格模式 27
1.3.3函数绑定 28
1.3.4数组方法 29
1.3.5对象方法 31
1.4小结 34
第2章 JavaScript文档 35
2.1行内和块级注释 35
2.2结构化的JavaScript文档 36
2.3 YUIDoc文档格式 36
2.3.1为“类”、构造器、属性和方法添加文档 37
2.3.2为事件添加文档 45
2.3.3为代码示例添加文档 45
2.3.4其他YUIDoc文档标签 46
2.4更具表达性的文档格式——Markdown 46
2.4.1用标题来组织内容 46
2.4.2换行以及创建段落 47
2.4.3创建列表 48
2.4.4强调文本 50
2.4.5显示代码 51
2.4.6添加引用 51
2.4.7添加URL链接 52
2.4.8插入图片 53
2.4.9生成水平分割线 53
2.4.10用反斜杠来插入保留字符 53
2.4.11对于其他内容,可以使用HTML 54
2.5使用YUIDoc创建一个文档网站 54
2.6小结 59
第3章 编写高质量的JavaScript 60
3.1进行静态代码分析 60
3.1.1 JSLint 60
3.1.2 JSHint 64
3.1.3 Google Closure Compiler和Closure Linter 65
3.1.4选择一个静态代码分析工具 66
3.2 JavaScript中的单元测试 67
3.2.1 JavaScript的单元测试框架 67
3.2.2使用Jasmine来进行JavaScript单元测试 68
3.3处理运行时错误 74
3.3.1 JavaScript的原生错误类型 75
3.3.2将可能出错的代码放入try-catch语句中 75
3.3.3检测错误类型 77
3.3.4自定义错误类型 77
3.4度量代码质量 79
3.4.1单元测试的代码覆盖度 79
3.4.2度量代码复杂度 81
3.5小结 84
第4章 增强JavaScript性能 85
4.1优化页面加载时间 85
4.1.1HTML标签顺序 85
4.1.2 JavaScript文件的GZip编码传输 85
4.1.3缩编、混淆和编译 86
4.1.4请求时才延迟加载JavaScript文件 90
4.2优化文档对象的操作 91
4.2.1实现对页面元素的最小化访问 92
4.2.2尽量利用已有元素 92
4.2.3离线DOM的利用 93
4.2.4使用CSS而非JavaScript来操控页面样式 94
4.3提升DOM事件性能 95
4.3.1委托事件至父元素 95
4.3.2使用框架化处理频密发出的事件 96
4.4提升函数性能 97
4.5使用正则表达式实现更快速的字符串操作 100
4.6更快速地使用数组 102
4.6.1快速创建数组 103
4.6.2快速进行数组循环 103
4.7转移密集型任务至Web Worker 106
4.8简单的性能测量 110
4.9小结 111
第5章 设计模式:创建型 112
5.1什么是设计模式 112
5.2创建型设计模式 113
5.2.1工厂模式 113
5.2.2抽象工厂模式 116
5.2.3生成器模式 120
5.2.4原型模式 122
5.2.5单例模式 124
5.3小结 128
第6章 设计模式:结构型 129
6.1适配器模式 129
6.2组合模式 132
6.3装饰模式 133
6.4外观模式 135
6.5享元模式 137
6.6掺合模式 143
6.7模块模式 147
6.8代理模式 150
6.9小结 153
第7章 设计模式:行为型 154
7.1职责链模式 154
7.2命令模式 157
7.3迭代器模式 160
7.4观察者模式 163
7.5中介者模式 167
7.6备忘录模式 171
7.7承诺模式 173
7.8策略模式 184
7.9小结 188
第8章 设计模式:架构型 189
8.1 MVC模式 189
8.2 MVP模式 197
8.3 MVVM模式 203
8.4架构型模式框架 208
8.5小结 209
第9章 代码文件依赖管理 210
9.1使用RequireJS进行代码文件依赖管理 210
9.2加载、初始化RequireJS 215
9.3模块名称的别名 217
9.4内容分发网络和后备 217
9.5建立模块 218
9.6于请求时才加载额外的脚本 220
9.7 RequireJS代码优化工具 221
9.8 RequireJS的附加插件 221
9.9 RequireJS的代替品 222
9.10小结 223
第10章 移动设备JavaScript开发 224
10.1移动Web开发的局限性 224
10.1.1电池续航能力 224
10.1.2网络带宽速度与延时 225
10.1.3板载内存容量 225
10.1.4操作系统响应能力 226
10.2通过JavaScript访问移动设备上的传感器 227
10.2.1访问地理位置定位传感器 228
10.2.2访问触摸传感器 230
10.2.3访问姿态传感器和方向传感器 232
10.2.4访问运动传感器 235
10.2.5未能访问的传感器 237
10.2.6事件框架化与传感器数据 237
10.2.7利用传感器数据进一步发挥 238
10.3网络连接故障与离线状态 238
10.3.1在线与离线状态的检测 239
10.3.2利用Web Storage API长期保存数据 241
10.3.3 HTML5 Application Cache 244
10.4响应式(自适应)网页设计的JavaScript 246
10.5小结 247
第11章 使用CanvasAPI创建游戏 248
11.1在Canvas中的基本绘图操作 248
11.2高清Canvas元素 251
11.3使用Canvas制作游戏 251
11.3.1在Canvas上绘制图像 252
11.3.2 Canvas中的动画 253
11.3.3游戏的控制 254
11.3.4碰撞检测 256
11.3.5游戏主循环 257
11.3.6分层Canvas以提高性能 258
11.4在Canvas中制作Frogger游戏 258
11.5小结 299
第12章 使用WebRTC实现视频聊天 300
12.1 WebRTC规范 300
12.2访问网络摄像头和麦克风 300
12.3建立一个简单的视频聊天网页应用程序 303
12.4创建视频聊天客户端 307
12.5小结 317
第13章 客户端模板引擎的使用 318
13.1动态更新页面内容 318
13.2通过Ajax动态加载HTML 319
13.3在客户端应用模板 320
13.3.1不依赖库实现客户端模板 321
13.3.2使用Mustache.js模板引擎实现客户端模板 323
13.3.3使用Handlebars.js引擎实现客户端模板 330
13.3.4作为替换的其他客户端模板引擎库 341
13.4考虑渐进增强 344
13.5小结 345
第14章 Node.js应用平台 346
14.1 Node.js安装 346
14.2编写Node.js应用程序 347
14.2.1 console对象 348
14.2.2加载模块 349
14.3 Node.js软件包 351
14.4划分Node.js应用程序分布至多个文件 356
14.5用干网页应用程序的Node.js框架 357
14.5.1 Express框架 357
14.5.2 Socket.IO 360
14.6 Node.js应用程序的托管 365
14.7小结 365
第15章 构建工具及自动化 366
15.1构建工具 366
15.1.1 Grunt——JavaScript任务运行器 367
15.1.2 Gulp.js——“流式”构建系统 374
15.1.3使用构建工具来使常规任务实现自动化 377
15.2第三方库和框架的管理 392
15.3项目的建立以及基本框架搭建 393
15.4小结 395
第16章 浏览器开发者工具 396
16.1找出隐藏的浏览器开发者工具 396
16.2 JavaScript控制台 398
16.2.1输出信息到控制台窗口 398
16.2.2使用控制台进行性能测量 400
16.2.3移除引用console对象的代码以进行发布 401
16.3对运行中的JavaScript Code进行调试 401
16.3.1已缩编代码的处理 401
16.3.2暂停并观察正在运行的JavaScript代码 403
16.4分析JavaScript代码 405
16.4.1查找内存泄漏 405
16.4.2识别性能瓶颈 408
16.5小结 410