编辑推荐
专业讲解全面Web前端设计模式书
*、百度前端高级工程师鼎力推荐
Web前端界以一种讲故事方式讲解每一种模式,让每位读者都能读懂。
书中案例都是实际工作中的真实案例,让读者身临其境。
全面涵盖专门针对JavaScript的36个设计模式,帮助读者尽快提高开发效率
深入剖析面向对象的设计原则及代码重构,帮助读者快速融入团队项目开发中
本书通过职场主人公“小铭”实战历练,介绍了他从菜鸟到高级程序员的蜕变过程,值得每一个程序员借鉴和学习!
各种设计模式的原则和准确定义、应用方法实践
内容简介
《JavaScript设计模式》共分六篇四十章,首先讨论了几种函数的编写方式,体会JavaScript在编程中的灵活性;然后讲解了面向对象编程的知识,其中讨论了类的创建、数据的封装以及类之间的继承;最后探讨了各种模式的技术,如简单工厂模式,包括工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式,以及外观模式,包括适配器模式。本书还讲解了几种适配器、代理模式、装饰者模式和MVC模式,讨论了如何实现对数据、视图、控制器的分离。在讲解MVP模式时,讨论了如何解决数据与视图之间的耦合,并实现了一个模板生成器;讲解MVVM模式时,讨论了双向绑定对MVC的模式演化。本书几乎包含了关于JavaScript设计模式的全部知识,是进行JavaScript高效编程必备的学习手册。
《JavaScript设计模式》适合JavaScript初学者、前端设计者、JavaScript程序员学习,也可以作为大专院校相关专业师生的学习用书,以及培训学校的教材。
作者简介
张容铭百度资深高级web前端研发工程师,长期工作在web前端一线上,现研发与维护百度图片搜索业务,曾主导百度新首页项目改版等。 喜欢钢琴,素描,而又常带着他的单反各地旅行。
目录
- 第一篇 面向对象编程
- 第1章 灵活的语言——JavaScript2
- 1.1 入职第一天2
- 1.2 函数的另一种形式2
- 1.3 用对象收编变量3
- 1.4 对象的另一种形式4
- 1.5 真假对象4
- 1.6 类也可以5
- 1.7 一个检测类5
- 1.8 方法还可以这样用6
- 1.9 函数的祖先7
- 1.10 可以链式添加吗8
- 1.11 换一种方式使用方法9
- 下章剧透10
- 忆之获10
- 我问你答10
- 第2章 写的都是看到的——面向
- 对象编程11
- 2.1 两种编程风格——面向过程与
- 面向对象11
- 2.2 包装明星——封装12
- 2.3 传宗接代——继承19
- 2.4 老师不止一位——多继承27
- 2.5 多种调用方式——多态29
- 下章剧透30
- 忆之获31
- 我问你答31
- 第二篇 创建型设计模式
- 第3章 神奇的魔术师——简单工厂模式34
- 3.1 工作中的第一次需求34
- 3.2 如果类太多,那么提供一个35
- 3.3 一个对象有时也可代替许多类37
- 3.4 你的理解决定你选择的方式38
- 下章剧透39
- 忆之获39
- 我问你答39
- 第4章 给我一张名片——工厂方法模式40
- 4.1 广告展现40
- 4.2 方案的抉择41
- 4.3 安全模式类42
- 4.4 安全的工厂方法43
- 下章剧透44
- 忆之获44
- 我问你答44
- 第5章 出现的都是幻觉——抽象
- 工厂模式45
- 5.1 带头模范——抽象类45
- 5.2 幽灵工厂——抽象工厂模式46
- 5.3 抽象与实现47
- 下章剧透49
- 忆之获49
- 我问你答49
- 第6章 分即是合——建造者模式50
- 6.1 发布简历50
- 6.2 创建对象的另一种形式50
- 6.3 创建一位应聘者52
- 下章剧透53
- 忆之获53
- 我问你答54
- 第7章 语言之魂——原型模式55
- 7.1 语言中的原型55
- 7.2 创建一个焦点图55
- 7.3 最优的解决方案56
- 7.4 原型的拓展58
- 7.5 原型继承58
- 下章剧透59
- 忆之获60
- 我问你答60
- 第8章 一个人的寂寞——单例模式61
- 8.1 滑动特效61
- 8.2 命名空间的管理员62
- 8.3 模块分明63
- 8.4 创建一个小型代码库63
- 8.5 无法修改的静态变量64
- 8.6 惰性单例65
- 下章剧透65
- 忆之获66
- 我问你答66
- 第三篇 结构型设计模式
- 第9章 套餐服务——外观模式68
- 9.1 添加一个点击事件68
- 9.2 兼容方式69
- 9.3 除此之外70
- 9.4 小型代码库70
- 下章剧透71
- 忆之获71
- 我问你答72
- 第10章 水管弯弯——适配器模式73
- 10.1 引入jQuery73
- 10.2 生活中的适配器73
- 10.3 jQuery适配器74
- 10.4 适配异类框架74
- 10.5 参数适配器75
- 10.6 数据适配76
- 10.7 服务器端数据适配77
- 下章剧透77
- 忆之获77
- 我问你答78
- 第11章 牛郎织女——代理模式79
- 11.1 无法获取图片上传模块数据79
- 11.2 一切只因跨域79
- 11.3 站长统计80
- 11.4 JSONP81
- 11.5 代理模板81
- 下章剧透83
- 忆之获83
- 我问你答84
- 第12章 房子装修——装饰者模式85
- 12.1 为输入框的新需求85
- 12.2 装饰已有的功能对象86
- 12.3 为输入框添砖加瓦86
- 下章剧透87
- 忆之获87
- 我问你答88
- 第13章 城市间的公路——桥接模式89
- 13.1 添加事件交互89
- 13.2 提取共同点90
- 13.3 事件与业务逻辑之间的桥梁90
- 13.4 多元化对象91
- 下章剧透93
- 忆之获93
- 我问你答93
- 第14章 超值午餐——组合模式94
- 14.1 新闻模块十万火急94
- 14.2 餐厅里的套餐业务95
- 14.3 每个成员要有祖先95
- 14.4 组合要有容器类96
- 14.5 创建一个新闻类97
- 14.6 把新闻模块创建出来99
- 14.7 表单中的应用100
- 下章剧透101
- 忆之获101
- 我问你答102
- 第15章 城市公交车——享元模式103
- 15.1 翻页需求103
- 15.2 冗余的结构104
- 15.3 享元对象104
- 15.4 实现需求105
- 15.5 享元动作106
- 下章剧透108
- 忆之获108
- 我问你答108
- 第四篇 行为型设计模式
- 第16章 照猫画虎——模板方法模式110
- 16.1 提示框归一化110
- 16.2 美味的蛋糕111
- 16.3 创建基本提示框111
- 16.4 模板的原型方法112
- 16.5 根据模板创建类113
- 16.6 继承类也可作为模板类113
- 16.7 创建一个提示框114
- 16.8 创建多类导航114
- 16.9 创建导航更容易116
- 下章剧透116
- 忆之获116
- 我问你答117
- 第17章 通信卫星——观察者模式118
- 17.1 团队开发的坎坷118
- 17.2 卫星的故事118
- 17.3 创建一个观察者119
- 17.4 拉出来溜溜121
- 17.5 使用前的思考121
- 17.6 大显身手121
- 17.7 对象间解耦123
- 17.8 课堂演练124
- 下章剧透125
- 忆之获125
- 我问你答125
- 第18章 超级玛丽——状态模式126
- 18.1 最美图片126
- 18.2 分支判断的思考126
- 18.3 状态对象的实现127
- 18.4 状态对象演练127
- 18.5 超级玛丽128
- 18.6 状态的优化129
- 18.7 两种使用方式130
- 下章剧透131
- 忆之获131
- 我问你答131
- 第19章 活诸葛——策略模式132
- 19.1 商品促销132
- 19.2 活诸葛132
- 19.3 策略对象133
- 19.4 诸葛奇谋133
- 19.5 缓冲函数134
- 19.6 表单验证134
- 19.7 算法拓展135
- 19.8 算法调用135
- 下章剧透136
- 忆之获136
- 我问你答137
- 第20章 有序车站——职责链模式138
- 20.1“半成品”需求138
- 20.2 分解需求139
- 20.3 第一站——请求模块139
- 20.4 下一站——响应数据适配模块140
- 20.5 终点站——创建组件模块141
- 20.6 站点检测——单元测试141
- 20.7 方案确定142
- 下章剧透142
- 忆之获143
- 我问你答143
- 第21章 命令模式144
- 21.1 自由化创建视图144
- 21.2 命令对象145
- 21.3 视图创建145
- 21.4 视图展示146
- 21.5 命令接口147
- 21.6 大功告成147
- 21.7 绘图命令148
- 21.8 写一条命令150
- 下章剧透150
- 忆之获151
- 我问你答151
- 第22章 驻华大使——访问者模式152
- 22.1 设置样式152
- 22.2 自娱自乐的IE152
- 22.3 访问操作元素153
- 22.4 事件自定义数据153
- 22.5 原生对象构造器154
- 22.6 对象访问器154
- 22.7 操作类数组155
- 下章剧透156
- 忆之获156
- 我问你答156
- 第23章 媒婆——中介者模式157
- 23.1 导航设置层157
- 23.2 创建中介者对象158
- 23.3 试试看,可否一用159
- 23.4 攻克需求159
- 23.5 订阅消息160
- 23.6 发布消息161
- 下章剧透162
- 忆之获162
- 我问你答162
- 第24章 做好笔录——备忘录模式163
- 24.1 新闻展示163
- 24.2 缓存数据164
- 24.3 新闻缓存器164
- 24.4 工作中的备忘录166
- 下章剧透166
- 忆之获166
- 我问你答166
- 第25章 点钞机——迭代器模式167
- 25.1 简化循环遍历167
- 25.2 迭代器167
- 25.3 实现迭代器168
- 25.4 小试牛刀170
- 25.5 数组迭代器171
- 25.6 对象迭代器171
- 25.7 试用迭代器172
- 25.8 同步变量迭代器172
- 25.9 分支循环嵌套问题174
- 25.10 解决方案176
- 下章剧透177
- 忆之获177
- 我问你答177
- 第26章 语言翻译——解释器模式178
- 26.1 统计元素路径178
- 26.2 描述文法179
- 26.3 解释器179
- 26.4 同级兄弟元素遍历180
- 26.5 遍历文档树180
- 26.6 小试牛刀181
- 下章剧透182
- 忆之获182
- 我问你答182
- 第五篇 技巧型设计模式
- 第27章 永无尽头——链模式184
- 27.1 深究jQuery184
- 27.2 原型式继承184
- 27.3 找位助手185
- 27.4 获取元素185
- 27.5 一个大问题186
- 27.6 覆盖获取187
- 27.7 方法丢失187
- 27.8 对比jQuery188
- 27.9 丰富元素获取189
- 27.10 数组与对象190
- 27.11 方法拓展191
- 27.12 添加方法192
- 27.13 大功告成195
- 下章剧透196
- 忆之获196
- 我问你答196
- 第28章 未来预言家——委托模式197
- 28.1 点击日历交互197
- 28.2 委托父元素197
- 28.3 预言未来198
- 28.4 内存外泄199
- 28.5 数据分发200
- 下章剧透201
- 忆之获201
- 我问你答201
- 第29章 数据管理器——数据访问
- 对象模式202
- 29.1 用户引导202
- 29.2 数据访问对象类203
- 29.3 数据操作状态203
- 29.4 增添数据204
- 29.5 查找数据205
- 29.6 删除数据206
- 29.7 检验DAO207
- 29.8 MongoDB208
- 29.9 在nodejs中写入配置项208
- 29.10 连接MongoDB208
- 29.11 操作集合209
- 29.12 插入操作209
- 29.13 删除操作210
- 29.14 更新操作211
- 29.15 查找操作211
- 29.16 操作其他集合212
- 下章剧透212
- 忆之获212
- 我问你答213
- 第30章 执行控制——节流模式214
- 30.1 返回顶部214
- 30.2 节流器214
- 30.3 优化浮层216
- 30.4 创建浮层类216
- 30.5 添加节流器217
- 30.6 图片的延迟加载218
- 30.7 延迟加载图片类218
- 30.8 获取容器内的图片219
- 30.9 加载图片220
- 30.10 筛选需加载的图片220
- 30.11 获取纵坐标221
- 30.12 节流器优化加载221
- 30.13 大功告成222
- 30.14 统计打包222
- 30.15 组装统计222
- 下章剧透224
- 忆之获224
- 我问你答224
- 第31章 卡片拼图——简单模板模式225
- 31.1 展示模板225
- 31.2 实现方案225
- 31.3 创建文字列表视图226
- 31.4 新方案227
- 31.5 再次优化228
- 31.6 模板生成器228
- 31.7 最佳方案229
- 下章剧透229
- 忆之获230
- 我问你答230
- 第32章 机器学习——惰性模式231
- 32.1 对事件的思考231
- 32.2 机器学习232
- 32.3 加载即执行232
- 32.4 惰性执行233
- 32.5 创建XHR对象233
- 32.6 第一种方案234
- 32.7 第二种方案235
- 下章剧透235
- 忆之获235
- 我问你答235
- 第33章 异国战场——参与者模式236
- 33.1 传递数据236
- 33.2 函数绑定237
- 33.3 应用于事件238
- 33.4 原生bind方法239
- 33.5 函数柯里化239
- 33.6 重构bind240
- 33.7 兼容版本241
- 下章剧透242
- 忆之获242
- 我问你答243
- 第34章 入场仪式——等待者模式244
- 34.1 接口拆分244
- 34.2 入场仪式244
- 34.3 等待者对象245
- 34.4 监控对象246
- 34.5 完善接口方法247
- 34.6 学以致用248
- 34.7 异步方法248
- 34.8 结果如何249
- 34.9 框架中的等待者250
- 34.10 封装异步请求250
- 34.11 轮询251
- 下章剧透251
- 忆之获251
- 我问你答252
- 第六篇 架构型设计模式
- 第35章 死心眼——同步模块模式254
- 35.1 排队开发254
- 35.2 模块化开发255
- 35.3 模块管理器与创建方法255
- 35.4 创建模块256
- 35.5 模块调用方法258
- 35.6 调用模块259
- 下章剧透259
- 忆之获260
- 我问你答260
- 第36章 大心脏——异步模块模式261
- 36.1 异步加载文件中的模块261
- 36.2 异步模块262
- 36.3 闭包环境262
- 36.4 创建与调度模块263
- 36.5 加载模块264
- 36.6 设置模块265
- 36.7 学以致用266
- 36.8 实现交互267
- 下章剧透267
- 忆之获267
- 我问你答267
- 第37章 分而治之——Widget模式268
- 37.1 视图模块化268
- 37.2 模板引擎269
- 37.3 实现原理269
- 37.4 模板引擎模块269
- 37.5 处理数据270
- 37.6 获取模板270
- 37.7 处理模板271
- 37.8 编译执行272
- 37.9 几种模板273
- 37.10 实现组件274
- 下章剧透274
- 忆之获275
- 我问你答275
- 第38章 三人行——MVC模式276
- 38.1 小白的顾虑276
- 38.2 一个传说——MVC276
- 38.3 数据层277
- 38.4 视图层278
- 38.5 控制器279
- 38.6 侧边导航栏279
- 38.7 侧边导航栏数据模型层280
- 38.8 侧边导航栏视图层281
- 38.9 侧边导航栏控制器层282
- 38.10 执行控制器284
- 38.11 增加一个模块284
- 下章剧透285
- 忆之获285
- 我问你答286
- 第39章 三军统帅——MVP模式287
- 39.1 数据模型层与视图层联姻的代价287
- 39.2 MVP模式287
- 39.3 数据层的填补288
- 39.4 视图层的大刀阔斧289
- 39.5 模板创建的分层处理289
- 39.6 处理一个元素291
- 39.7 改头换面的管理器292
- 39.8 一个案例293
- 39.9 用数据装扮导航293
- 39.10 千呼万唤始出来的导航294
- 39.11 模块开发中的应用294
- 39.12 MVP构造函数295
- 39.13 增添管理器295
- 39.14 增加一个模块295
- 下章剧透297
- 忆之获297
- 我问你答297
- 第40章 视图的逆袭——MVVM模式298
- 40.1 视图层的思考298
- 40.2 滚动条与进度条299
- 40.3 组件的探讨299
- 40.4 视图模型层299
- 40.5 创建进度条300
- 40.6 创建滑动条301
- 40.7 让滑动条动起来302
- 40.8 为组件点睛303
- 40.9 寻找我的组件303
- 40.10 展现组件304
- 下章剧透304
- 忆之获304
- 我问你答305
- 附录A307