本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。
第一部分 基础知识
第1章 面向对象的JavaScript
1.1 动态类型语言和鸭子类型2
1.2 多态4
1.3 封装12
1.4 原型模式和基于原型继承的JavaScript对象系统14
第2章 this、call和apply
2.1 this24
2.2 call和apply29
第3章 闭包和高阶函数
3.1 闭包 35
3.2 高阶函数44
3.3 小结58
第二部分 设计模式
第4章 单例模式
4.1 实现单例模式60
4.2 透明的单例模式61
4.3 用代理实现单例模式62
4.4 JavaScript中的单例模式63
4.5 惰性单例65
4.6 通用的惰性单例68
4.7 小结70
第5章 策略模式
5.1 使用策略模式计算奖金72
5.2 JavaScript 版本的策略模式75
5.3 多态在策略模式中的体现76
5.4 使用策略模式实现缓动动画76
5.5 更广义的“算法”80
5.6 表单校验80
5.7 策略模式的优缺点86
5.8 一等函数对象与策略模式86
5.9 小结87
第6章 代理模式
6.1 第一个例子——小明追MM的故事88
6.2 保护代理和虚拟代理91
6.3 虚拟代理实现图片预加载91
6.4 代理的意义93
6.5 代理和本体接口的一致性94
6.6 虚拟代理合并HTTP 请求95
6.7 虚拟代理在惰性加载中的应用97
6.8 缓存代理99
6.9 用高阶函数动态创建代理100
6.10 其他代理模式101
6.11 小结102
第7章 迭代器模式
7.1 jQuery 中的迭代器103
7.2 实现自己的迭代器104
7.3 内部迭代器和外部迭代器104
7.4 迭代类数组对象和字面量对象106
7.5 倒序迭代器106
7.6 中止迭代器107
7.7 迭代器模式的应用举例107
7.8 小结109
第8章 发布—订阅模式
8.1 现实中的发布—订阅模式110
8.2 发布—订阅模式的作用110
8.3 DOM 事件111
8.4 自定义事件112
8.5 发布—订阅模式的通用实现113
8.6 取消订阅的事件115
8.7 真实的例子——网站登录115
8.8 全局的发布—订阅对象117
8.9 模块间通信119
8.10 必须先订阅再发布吗120
8.11 全局事件的命名冲突121
8.12 JavaScript实现发布—订阅模式的便利性124
8.13 小结124
第9章 命令模式
9.1 命令模式的用途125
9.2 命令模式的例子——菜单程序126
9.3 JavaScript中的命令模式128
9.4 撤销命令130
9.5 撤消和重做132
9.6 命令队列134
9.7 宏命令134
9.8 智能命令与傻瓜命令135
9.9 小结136
第10章 组合模式
10.1 回顾宏命令138
10.2 组合模式的用途139
10.3 请求在树中传递的过程139
10.4 更强大的宏命令140
10.5 抽象类在组合模式中的作用143
10.6 透明性带来的安全问题144
10.7 组合模式的例子——扫描文件夹145
10.8 一些值得注意的地方147
10.9 引用父对象148
10.10 何时使用组合模式150
10.11 小结150
第11章 模板方法模式
11.1 模板方法模式的定义和组成151
11.2 第一个例子——Coffee or Tea151
11.3 抽象类156
11.4 模板方法模式的使用场景159
11.5 钩子方法160
11.6 好莱坞原则162
11.7 真的需要“继承”吗162
11.8 小结164
第12章 享元模式
12.1 初识享元模式165
12.2 内部状态与外部状态166
12.3 享元模式的通用结构167
12.4 文件上传的例子167
12.5 享元模式的适用性173
12.6 再谈内部状态和外部状态173
12.7 对象池175
12.8 小结178
第13章 职责链模式
13.1 现实中的职责链模式179
13.2 实际开发中的职责链模式180
13.3 用职责链模式重构代码181
13.4 灵活可拆分的职责链节点183
13.5 异步的职责链184
13.6 职责链模式的优缺点185
13.7 用AOP 实现职责链186
13.8 用职责链模式获取文件上传对象187
13.9 小结188
第14章 中介者模式
14.1 现实中的中介者190
14.2 中介者模式的例子——泡泡堂游戏191
14.3 中介者模式的例子——购买商品199
14.4 小结207
第15章 装饰者模式
15.1 模拟传统面向对象语言的装饰者模式210
15.2 装饰者也是包装器211
15.3 回到JavaScript 的装饰者212
15.4 装饰函数212
15.5 用AOP 装饰函数214
15.6 AOP 的应用实例216
15.7 装饰者模式和代理模式222
15.8 小结223
第16章 状态模式
16.1 初识状态模式224
16.2 状态模式的定义230
16.3 状态模式的通用结构230
16.4 缺少抽象类的变通方式 231
16.5 另一个状态模式示例——文件上传232
16.6 状态模式的优缺点241
16.7 状态模式中的性能优化点241
16.8 状态模式和策略模式的关系241
16.9 JavaScript版本的状态机242
16.10 表驱动的有限状态机244
16.11 实际项目中的其他状态机245
16.12 小结245
第17章 适配器模式
17.1 现实中的适配器246
17.2 适配器模式的应用247
17.3 小结250
第三部分 设计原则和编程技巧
第18章 单一职责原则
18.1 设计模式中的SRP原则252
18.2 何时应该分离职责256
18.3 违反SRP原则256
18.4 SRP 原则的优缺点257
第19章 最少知识原则
19.1 减少对象之间的联系258
19.2 设计模式中的LKP原则259
19.3 封装在LKP 原则中的体现261
第20章 开放-封闭原则
20.1 扩展window.onload函数263
20.2 开放和封闭264
20.3 用对象的多态性消除条件分支265
20.4 找出变化的地方266
20.5 设计模式中的开放—封闭原则268
20.6 开放—封闭原则的相对性270
20.7 接受第一次愚弄270
第21章 接口和面向接口编程
21.1 回到Java的抽象类271
21.2 interface276
21.3 JavaScript 语言是否需要抽象类和interface275
21.4 用鸭子类型进行接口检查277
21.5 用TypeScript 编写基于interface的命令模式278
第22章 代码重构
22.1 提炼函数282
22.2 合并重复的条件片段283
22.3 把条件分支语句提炼成函数284
22.4 合理使用循环285
22.5 提前让函数退出代替嵌套条件分支285
22.6 传递对象参数代替过长的参数列表286
22.7 尽量减少参数数量287
22.8 少用三目运算符288
22.9 合理使用链式调用288
22.10 分解大型类289
22.11 用return退出多重循环290
参考文献293
Rails是业界领先的新一代Web2.0应用程序开发框架,而这本《RailsCookbook》里充满了为了让你成为Rails开发专家而准备的各种解决方
网络管理员教程-全国计算机技术与软件专业技术资格(水平)考试指定用书-(第4版) 本书特色本书按照全国计算机技术与软件专业技术资格(水平)考试要求编写,内容紧扣...
《智慧养老:服务与运营》内容简介:本书智慧养老是未来养老的重要方向,它将会和社区居家养老、机构养老结合形成智慧社区居家养老
风靡全球的网络隐私安全圣经高危信息生态环境的生存指南这是一部及时、生动、富有启发性的著作,可以改变人们对隐私、名声以及互
《华与华超级符号案例集》内容简介:创意改变命运,创意缔造奇迹。本书全景式记录了足力健、傣妹、牛小灶、洽洽、老娘舅、立高、新
《那猫那人那城》内容简介:《猎人们》之后,朱天心全新猫书 异族他类自由来去,街猫与人族相遇的城市传奇 马家辉、杨照推荐,这不
《平衡掌控者》内容简介:本书由真正从事游戏行业工作的一线人员所著,书中的全部案例来自真实的游戏设计案例。全书共7章,第1章介
掌握需求过程-(第2版) 本书特色 本书论述了软件开发中的重要课题—如何得到正确需求,书中用一个接一个的步骤、一个接一个的模板、一个接一个的例子,向读者展示了经...
随着Ajax的兴起,JavaScript迅速地从改进网站的配角晋升为开发专业级高质量应用的主角,成为了Web开发中不可缺少的一员。本书主要
信息系统项目管理师教程-(第2版) 本书特色 根据人事部、信息产业部文件,计算机技术与软件专业技术资料考试纳入全国专业技术人员职业资格证书制度的统一规划。通过考...
《熊猫指南·风味探索》内容简介:中华文明是四大古文明中唯一延续至今的,中国人喜好美食也是世界闻名的。如此大的国家,如此丰饶
《Nginx实战》内容简介:本书主要讲解了Nginx在反向代理和应用开发中的作用,阅读本书可以了解Nginx在互联网开发中扮演的多个角色,
《软件架构师的12项修炼》内容简介:每一位软件开发人员都有一个架构师的梦,但为何真正的软件架构师却寥寥无几?软件开发人员更容
当代机器深度学习方法与应用研究 内容简介 本书对当前*新的深度学习方法及应用进行了全面的概述, 涵盖了自动语音识别 (ASR) 、计算机视觉、语言建模、文本处理...
《嘻嘻哈哈陪娃图鉴·我们一起玩游戏》内容简介:本书写给家长们的陪娃手册,由北师大教育学博士李芳主编、针对3至6岁有宝宝的家庭
《10W+新媒体文案炼成记》内容简介:本书是一本新媒体文案专题训练实战手册,在微信、微商、电商、APP、头条号这5大文案写作最为火
聞名全球的「frogdesign」(青蛙設計)如何在經濟大衰退之際,還能締造破記錄營收。‧高科技設計超級巨星哈特姆.艾斯林格(青蛙設計
《思维风暴:22种黄金思维+700道世界思维名题(超值白金版)》内容简介:爱因斯坦说过:人们解决世界的问题,靠的是大脑思维和智慧。
《Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境
本书是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。本书充分考虑了初学