序 1
前言 3
第1章 重构是什么? 13
你如何保证不改变行为? 13
如果不改变行为,重构的目的是什么? 18
重构是什么,不是什么 21
小结 22
第2章 你使用哪种JavaScript? 23
版本与规范 24
平台与实现 25
预编译语言 26
框架 27
库 29
你需要什么JavaScript? 29
我们在用什么JavaScript? 30
小结 30
第3章 测试 31
为什么测试 34
测试的多种方法 35
工具和流程 43
小结 52
第4章 测试实践 53
从零开始的代码 55
采用测试驱动开发的从零开始的代码 61
未经测试的代码与特性测试 80
调试和回归测试 85
小结 93
第5章 基本重构目标 95
函数块 98
输入 101
输出 106
副作用 109
上下文第一部分:隐式输入 110
上下文第二部分:隐私 116
小结 128
第6章 重构基本结构 130
示例代码 132
我们的信心策略 135
重命名 137
无用的代码 142
变量 148
字符串 157
使用数组:循环、forEach、映射 161
小结 167
第7章 重构函数与对象 168
示例代码(改进后) 168
数组和对象的替代品 171
测试我们所拥有的 179
提取函数 185
用全局对象简化API 192
小结 246
第8章 层次结构中的重构 247
关于“CRUD应用”和框架 247
构建层次结构 248
破坏层次结构 256
继承与结构 264
Has-A关系 270
继承反模式 271
小结 280
第9章 重构到面向对象模式 281
模板方法 282
策略 285
状态 288
空对象 295
包装(装饰器和适配器) 302
外观 310
小结 313
第10章 重构异步 315
为什么用异步? 315
修复金字塔厄运 318
回调和测试 326
Promises 330
小结 336
第11章 函数式重构 337
函数式编程的限制和好处 338
基础 344
高级基础 358
Burritos 369
学习和使用Burritos 383
从OOP迁移到FP 385
小结 390
第12章 结论 392
附录A 进一步阅读和资源 393