JavaScript设计模式与开发实践

出版日期:2015-5
ISBN:9787115388881
作者:曾探
页数:312页

内容概要

曾探
2007年毕业于吉林大学软件学院。就职于国内知名前端团队腾讯AlloyTeam,高级工程师。
曾参与Web QQ、QQ群、Q+开发者网站、微云、QQ兴趣部落等大型前端项目的开发。有过Java、Python和JavaScript的开发经验,业余作品有HTML5版街头霸王等。
平时喜欢电影和音乐,业务时间也是一名健身教练。

书籍目录

第一部分 基础知识
第1章 面向对象的JavaScript
1.1 动态类型语言和鸭子类型  2
1.2 多态  4
1.3 封装  12
1.4 原型模式和基于原型继承的JavaScript对象系统  14
第2章 this、call和apply
2.1 this  24
2.2 call和apply  29
第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 Tea  151
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 interface  276
21.3 JavaScript 语言是否需要抽象类和interface  275
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

作者简介

本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。


 JavaScript设计模式与开发实践下载 更多精彩书评



发布书评

 
 


精彩书评 (总计3条)

  •     之前看过《javascript模式》一书,那是一本颇受好评的书籍。而本书则是在设计模式上对模式一书的进一步扩充。本书的一大特点就是结合实际,代码较完整,能直接应用到实际开发中,不过从作者的代码书写风格和严谨方面考虑来说,书中有一些错误。由于有些错误需要重写代码,而一些则是看似“吹毛求疵”的问题,所以就没有去图灵社区提交勘误,但在此一并提出:迭代器迭代数组的一个案列:while(!iterator1.isDone()&&!iterator2.isDone()){}这里的while条件意思是只要有一个迭代器迭代到数组的最后一个元素就完成循环了,因此要迭代的数组为[1,2,3]和[1,2,3,4]时,该代码认为他们是相等的,所以应该把"&&"换成"||"。但这样改也是不够的,[1,2,3]和[1,2,3,undefined]仍被认为是相等的。作者喜欢将for循环的判断语句用来迭代数组,形如:for(;list[i++];)。在本书的案列和大部分情况下是没问题的,但是这个数组中的某个值为假值时,情况可能就不如所愿的。但作者未提及。发布订阅模式的8.5小结:P114让所有对象都安装发布订阅功能。这里是通过浅复制实现的。所以所有通过该方法实现具有发布订阅功能的对象,实际都共享的是同一个“缓存列表”,因此他们的回调函数也是共享的而不是独自拥有的。(当不同对象订阅了同一个事件该问题就显示出来了)P202的中介者模式中,作者使用if(((number-0)|0)!==number-0){}来判断用户输入的购买数量是否为正整数。意思是非正整数会进入条件分支。比如1.2,2.1,0(0不是正整数)。但是number为0并不会进入条件分支。从作者的实际意图来说,数量为0并不是“正确的购买数量”,所以在条件判断中应该多加一个表达式来判断。P133中if(command){//***}条件command是由高阶函数makeCommand返回的一个函数。他始终是一个函数,所以command转为布尔值为真,因此这个判断这么写是错误的。P268 作者的arrayMap函数是在模仿Array.prototype.map函数。不过需要注意:Array.prototype.map函数接受的回调函数的参数应该是(value,index,context),而作者的代码实际模仿的是jquery的map方法。除了这些问题,还有一些比较小的问题,或者说不是问题,这里就不讨论了。此外本书缺少对原型链的讨论,因为有些模式可以通过原型链实现。抛开这些小小的瑕疵,从这本书中能收获比较多的知识,能够让自己的代码写的更加美观。特别是最后几章作者列出的几点原则比较有参考性,而一些与编程无关的举例具有画龙点睛的作用,很有启发。
  •     读这本书跟我读那些经典的外文技术书籍一个感觉,由浅入深,娓娓道来,非常负责任。所以这是一本非常不错的国产好书,比起其它市面上的javascript设计模式的书籍好多了。这本书认真的读了一遍,但感觉它非常值得反复仔细研读多遍。不适合初级入门的人,但是对那些入门了以后尚待提高进阶的人来说,绝对是一本难能可贵的书。
  •     本书结合了Javascript本身的语言特性来讲解设计模式,而且本书的示例中会结合传统面向对象语言(静态类型)以及作为动态语言的Javascript实现同一设计模式的不同实现方式,这点更容易让只有静态语言背景的读者接受,并知道其中的差别。其中,非常好的一点的作者在讲解设计模式的过程中结合实际生成过程中的一些场景,并如何通过在Javascript中使用对应设计模式来解决这类问题。

精彩短评 (总计50条)

  •     难得的中文好书,由浅入深,娓娓道来。虽有小瑕疵(都在笔记里列出),但绝对是一本值得反复研读的好书。
  •     个人觉得,受用!真的理解设计模式啦
  •     推荐~
  •     好书 作者丰富的经验太棒了
  •     简明易懂
  •     国产书我给五星的很少,这本书确实非常不错。通过作者的语言可以了解到作者确实实在一线工作,并且累积大量的实战经验,而非一些秀才侃侃而谈!作者一直强调要注重设计而不滥用设计,这就是恰如其分的设计吧。
  •     兵法
  •     还可以吧,挺简单易懂的
  •     学到了不少小技巧
  •     学习js设计模式的入门首选
  •     好读
  •     非常棒的一本书,在设计模式以及js两方面都有很大的收获。
  •     好书
  •     非常不错, 浅显易懂
  •     目前读过最好的JavaScript书,通俗易懂,深入浅出,不要说工具书权威指南和高级编程。
  •     的确不错。。。信息量巨大。。。。。。
  •     不错,有助于提高编码质量,感觉例子还可以更复杂一点
  •     相比代码排版就看不下去的《JavaScript设计模式》,本书通俗易懂的结合现实例子的讲解就易读许多了,尽管可能代码有需要勘误的地方但本人基本做的后端开发就没有动手实践而权当伪代码看了。前后还分别加了基础知识和设计原则编程技巧,有铺垫有延伸,由浅入深娓娓道来,值得收藏。
  •     作者是来自一线的工程师,讲解理论的同时,给出了很多实际项目中的示例,简单易懂
  •     设计模式入门好书,不只告诉你怎么做,还说明白了为什么和什么时候这么做,冲着这一点就必须推荐了。
  •     感觉还行,有些代码思想还是值得学习。
  •     设计模式这种东西来回都是那些事,看到前几章本以为作者会用FP方式重新诠释设计模式,结果下半本的内容还是回到OO的路上。可能是期待太高了
  •     看起来很舒服
  •     好书,国产良心作。
  •     看完之后,每当实现一个需求就会想能不能用这里的设计模式优化下,是一本可以多次翻阅的好书,期待作者的下一本书。^_^
  •     1. 花了四个晚上翻完这本书,浅显易懂,从目的、现实例子、动静态类型语言在设计模式实现上的差异以及对应的实际用例,勾绘了设计模式的核心内容。作者作为一个闷骚程序员,举的一些例子实在太可爱。这本《设计模式》看完了,收获挺大,过段时间再荟萃一篇自己的整合笔记出来,也准备翻一翻另外两本《设计模式》做一个主题阅读,再辅一本《函数式编程》钻研下编程方面的技巧和能力。 2. 看完书还是需要整理,不然看完了等于没看。有积累,还能随时翻一翻做些回忆巩固、参考。 3. 最后,安利下昨天(其实可以说前天)写的一个状态提取函数atcon,https://github.com/Xaber20110202/atcon,和复杂的if、else说再见。
  •     好书!
  •     非常棒的书,比《JavaScript设计模式》中文版好太多,后面那本还是看英文原版版吧
  •     通俗易懂的好书,不过容易造成滥用的情况。现实的业务编程背景下,设计模式的使用是比较少见的,驾驭得不好的话容易引起严重的错误
  •     javascript基本语法很简单,但思维方式上跟其他语言有很大差别。看这本书能更深刻地理解javascript,更好地运用。
  •     实践过少,有些还是看不懂,明年再看一次
  •     Javascript设计模式好书,由浅入深,示例清晰。 AOP before after确实让人眼前一亮,增加了见识,设计模式要多思考多实践
  •     在读中,无奈自己水平太差看不太懂
  •     讲解的很通俗,连我也能基本看懂
  •     比O'reily社对应的书好的不多,这是一本!
  •     一般吧
  •     在阅读的过程中对一些框架的设计有了新的认识,例如 Vuex 就是应用了状态模式。
  •     必读系列
  •     速度看了一遍又认真敲了第二遍。闭包用的很溜,不过到底很多好东西还是得要有实践场景的。
  •     百度有本类似的
  •     很实用的设计模式的书,提供了很多编程的思路,值得时常翻看
  •     20150909:alloyteam的书//20160222:好多年没看到国人写的、这么优秀的技术书了,绝不是趋利的拼凑之作,字里行间都透露出作者有积淀,且用心把这些积淀传授出来的诚意。优点不胜枚举:行文流畅,全程伴随例子,难度曲线平滑、措辞实在不故弄玄虚……
  •     看完后,我把星星加到了4颗星星。2016年的js书籍这个是起点,15年是speaking javascript
  •     国产的难得好书,作者十分用心。整本书的知识点循序渐进。细心的介绍了传统设计模式和JavaScript设计模式的区别。每种设计模式都举出了与之适合的实际例子。如果你想了解一下JavaScript的设计模式,这本书不要错过。
  •     这本书会让你思考如何编写优雅,健壮的代码。
  •     简单易懂,收获很多
  •     这种书需要反复读,需要在工作中碰到问题的时候再回过头来读。
  •     看到是alloyTeam就脑残粉一般的买了,设计模式这块一直比较缺失……但愿在鹅厂中工作顺利,我要补足的实在太多了 -------------------------------------------------------------- 读后感:觉得是我最近买的质量最好的一本Js书,其实我很喜欢图灵原创系的书籍,国外的技术书翻译质量通常都堪忧,自己英语又是个战五渣。这本作者的叙述深入浅出,结合项目场景也让读者加深理解。但对我来说,只读一遍有很多地方还是懵懂,还是要多重温思考结合自己的项目才能有更深的领悟。
  •     难得的国内作者著有的、基于 JavaScript 讲解设计模式的书,针对十来种更适合 JavaScript 的设计模式进行讲解,同时对模拟传统面向对象方法的类实现和原生 JavaScript 实现方式进行辨析,力荐!
  •     看看国人的书吧(≧∇≦) 看了5章,发现是非常非常好的一本书!作者思路十分清晰内容通俗易懂!有很多非常实用的代码片段。 个人觉得唯一不好的地方就是这本书的封面,之前差点因为封面太土太难看而差点错失这本书了-_-#
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024