登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書

『簡體書』编写可靠的JavaScript代码 测试驱动开发JavaScript商业软件

書城自編碼: 2876922
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: [美] Lawrence D. Spencer,Seth H
國際書號(ISBN): 9787302443971
出版社: 清华大学出版社
出版日期: 2016-08-01
版次: 1 印次: 1
頁數/字數: 469页
書度/開本: 32开 釘裝: 平装

售價:HK$ 104.7

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
盗墓笔记之秦岭神树4
《 盗墓笔记之秦岭神树4 》

售價:HK$ 57.3
战胜人格障碍
《 战胜人格障碍 》

售價:HK$ 66.7
逃不开的科技创新战争
《 逃不开的科技创新战争 》

售價:HK$ 103.3
漫画三国一百年
《 漫画三国一百年 》

售價:HK$ 55.2
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
《 希腊文明3000年(古希腊的科学精神,成就了现代科学之源) 》

售價:HK$ 82.8
粤行丛录(岭南史料笔记丛刊)
《 粤行丛录(岭南史料笔记丛刊) 》

售價:HK$ 80.2
岁月待人归:徐悲鸿自述人生艺术
《 岁月待人归:徐悲鸿自述人生艺术 》

售價:HK$ 61.4
女人的中国医疗史:汉唐之间的健康照顾与性别
《 女人的中国医疗史:汉唐之间的健康照顾与性别 》

售價:HK$ 103.8

 

建議一齊購買:

+

HK$ 85.6
《机器学习Web应用》
+

HK$ 75.4
《Web API的设计与开发》
+

HK$ 84.1
《React开发实战》
+

HK$ 118.5
《深入React技术栈》
+

HK$ 118.5
《深入理解JavaScript》
編輯推薦:
本书分为5个部分:第Ⅰ部分奠定坚实的基础涵盖了软件工程的关键概念,例如SOLID和DRY原
则,还讨论了单元测试和测试驱动开发的优点。在第Ⅱ部分测试基于模式的代码中,我们描述并使用测试驱动开发创建了
几个有用的代码模式。第Ⅲ部分测试和编写高级JavaScript特性描述了如何使用和测试
JavaScript语言更高级的特性。第Ⅳ部分测试中的特殊主题提供了测试DOM操作的样例,还演示了用于增
强代码标准的静态分析工具的使用。第Ⅴ部分总结回顾了测试驱动开发的概念,还展示了一些本书用到的JavaScript习
语。
內容簡介:
本书分为5个部分:
第Ⅰ部分“奠定坚实的基础”涵盖了软件工程的关键概念,例如SOLID和DRY原
则,还讨论了单元测试和测试驱动开发的优点。
在第Ⅱ部分“测试基于模式的代码”中,我们描述并使用测试驱动开发创建了
几个有用的代码模式。
第Ⅲ部分“测试和编写高级JavaScript特性”描述了如何使用和测试
JavaScript语言更高级的特性。
第Ⅳ部分“测试中的特殊主题”提供了测试DOM操作的样例,还演示了用于增
强代码标准的静态分析工具的使用。
第Ⅴ部分“总结”回顾了测试驱动开发的概念,还展示了一些本书用到的JavaScript习
语。
關於作者:
 Lawrence D. Spencer领导SeerIS的一个国际开发者团队,SeerIS公司是波士顿附近的一家软件和服务公司。他拥有超过35年的工作经验,曾经担任过管理人员、开发人员、咨询师以及讲师,经常出席编程大会。Seth H. Richards从2002年开始一直专业制作软件。他的工作专注于基于Web的企业级地理信息系统应用。
目錄
目 录
第Ⅰ部分 奠定坚实的基础
第1章 实践软件工程 3
1.1 编写从开始就正确的代码 4
1.1.1 掌握JavaScript的特性 4
1.1.2 在大型系统中规避JavaScript陷阱 15
1.1.3 应用软件工程原则 17
1.2 编写保持正确的代码 22
1.2.1 投资单元测试的未来 22
1.2.2 实践测试驱动开发 22
1.2.3 编写易于测试的代码 23
1.3 小结 26
第2章 准备工具 27
2.1 使用测试框架 27
2.1.1 辨别不正确的代码 30
2.1.2 可测试性设计 32
2.1.3 编写最少的代码 33
2.1.4 安全维护和重构 33
2.1.5 可运行规范 34
2.1.6 当前的开源和商业框架 34
2.1.7 介绍Jasmine 36
2.2 使用依赖注入框架 41
2.2.1 依赖注入的定义 41
2.2.2 使用依赖注入让代码更可靠 43
2.2.3 掌握依赖注入 43
2.2.4 案例研究:编写一个轻量级依赖注入框架 43
2.2.5 使用依赖注入框架 50
2.2.6 当前的依赖注入框架 52
2.3 使用切面工具 53
2.3.1 案例研究:使用和不使用AOP进行缓存 53
2.3.2 案例研究:构建Aop.js模块 55
2.3.3 其他AOP库 67
2.3.4 结论 68
2.4 使用代码检查工具 68
2.4.1 使用linting工具让代码更可靠 68
2.4.2 JSHint简介 71
2.4.3 其他工具 73
2.4.4 严格模式 74
2.5 小结 74
第3章 构造可靠的对象 75
3.1 使用原生数据 75
3.2 使用对象字面量 77
3.3 使用模块模式 78
3.3.1 创建任意模块 78
3.3.2 创建立即执行模块 79
3.3.3 创建可靠的模块 80
3.4 使用对象原型和原型继承 80
3.4.1 默认对象原型 80
3.4.2 原型继承 81
3.4.3 原型链 82
3.5 使用new创建对象 83
3.6 使用类继承 88
3.6.1 模拟类继承 88
3.6.2 重复将杀死Kangaroo 89
3.7 使用函数式继承 91
3.8 猴子补丁Monkey-Patching 92
3.9 小结 95
第Ⅱ部分 测试基于模式的代码
第4章 浏览各种模式的优点 99
4.1 案例分析 99
4.2 通过更广泛的词汇产生更加优雅的代码 100
4.3 使用拥有良好设计、良好测试的构建块产生可靠的代码
101
4.4 小结 102
第5章 确保回调模式的正确使用 103
5.1 通过单元测试了解回调模式 104
5.1.1 编写和测试使用了回调函数的代码 104
5.1.2 编写和测试回调函数 109
5.2 避免问题 113
5.2.1 扁平化回调箭头 113
5.2.2 注意this变量 115
5.3 小结 119
第6章 确保承诺模式的正确使用 121
6.1 通过单元测试了解承诺 122
6.1.1 使用承诺 122
6.1.2 构造和返回承诺 127
6.1.3 测试XMLHttpRequest 130
6.2 串联承诺 133
6.3 使用承诺封装器 134
6.4 了解状态和命运 135
6.5 区分标准承诺和jQuery承诺 135
6.6 小结 136
第7章 确保正确使用散函数应用程序 137
7.1 对散函数应用程序进行单元测试 137
7.2 为散函数应用程序创建切面 139
7.3 区分散函数应用程序和柯里化 140
7.3.1 柯里化 140
7.3.2 散函数应用程序 141
7.4 小结 141
第8章 确保备忘录模式的正确使用 143
8.1 通过单元测试了解备忘录模式 144
8.2 使用AOP添加备忘录 147
8.2.1 创建备忘录切面 147
8.2.2
为restaurantApi应用returnValueCache切面 150
8.3 小结 152
第9章 确保单例模式的正确实现 153
9.1 通过单元测试了解单例模式 154
9.1.1 使用对象字面量实现单例共享缓存 154
9.1.2 使用模块实现单例共享缓存 158
9.2 小结 162
第10章 确保工厂模式的正确实现 163
10.1 为工厂编写单元测试 163
10.2 实现工厂模式 169
10.3 考虑其他工厂类型 171
10.4 小结 171
第11章 确保沙箱模式的正确实现和使用 173
11.1 通过单元测试了解沙箱模式 173
11.1.1 创建部件沙箱 174
11.1.2 创建和测试沙箱工具 187
11.1.3 创建与沙箱一起使用的函数 191
11.2 小结 193
第12章 确保装饰器模式的正确实现 195
12.1 使用测试驱动的方式开发装饰器 196
12.1.1 为被装饰的对象编写一个假对象 197
12.1.2 为错误的传递编写测试 198
12.1.3 编写空白装饰器 199
12.1.4 添加传递功能到装饰器 200
12.1.5 验证成功传递 202
12.1.6 添加装饰器的特性 204
12.1.7 通用化装饰器 210
12.2 小结 211
第13章 确保策略模式的正确实现 213
13.1 通过单元测试了解该模式 213
13.1.1
在不使用策略模式的情况下实现transportScheduler 214
13.1.2 使用策略模式实现transportScheduler
216
13.2 小结 227
第14章 确保代理模式的正确实现 229
14.1 通过测试驱动的方式开发代理 230
14.2 小结 245
第15章 确保正确实现可链接方法 247
15.1 通过单元测试了解该模式 248
15.2 链接then方法 255
15.3 小结 257
第Ⅲ部分 测试和编写高级JavaScript特性
第16章 在无接口语言中遵守接口 261
16.1 了解接口的优点 262
16.2 了解接口隔离原则 263
16.3 使用测试驱动开发创建契约注册表 265
16.3.1 定义契约 266
16.3.2 判断是否履行了契约 267
16.3.3 断言契约被履行了 271
16.3.4 绕过契约执行 273
16.3.5 创建在被返回创建的对象上实施契约的切面
273
16.4 小结 277
第17章 确保正确的参数类型 279
17.1 了解JavaScript无类型参数带来的机会和风险
280
17.2 扩展ContractRegistry检查参数
280
17.2.1 界定任务范围 280
17.2.2 判断集合中的所有变量是否都履行了它的契约
281
17.2.3 断言集合中的所有变量都履行了它的契约 289
17.2.4 在切面中打包参数检查功能 290
17.3 支持契约库 292
17.4 综合起来 293
17.4.1 创建契约模块 293
17.4.2 创建应用程序的ContractRegistry
296
17.4.3 为生产发布绕过契约 297
17.5 比较面向切面的解决方案和静态解决方案 297
17.5.1 考虑TypeScript的优点 297
17.5.2 考虑切面的优点 297
17.6 小结 298
第18章 确保正确使用call、apply和bind 299
18.1 浏览this是如何绑定的 299
18.1.1 默认绑定 300
18.1.2 隐式绑定 302
18.1.3 new绑定 303
18.1.4 显式绑定 305
18.2 创建和测试使用call、apply和bind的代码
305
18.2.1 使用call和apply 305
18.2.2
使用测试驱动开发创建一个Array.prototype.forEach Polyfill 307
18.2.3 使用bind 316
18.3 小结 321
第19章 确保正确使用方法借用 323
19.1 确保借用对象符合需求 324
19.1.1 让被借用的函数验证借用者的资格 324
19.1.2 向被借用的对象附加切面 326
19.1.3 使用borrow方法 329
19.1.4 在ContractRegistry中添加对象验证器
330
19.2 预期借用者的副作用 331
19.2.1 考虑被隔离函数的副作用 331
19.2.2 考虑调用其他函数的函数的副作用 332
19.3 预期捐赠者对象的副作用 338
19.4 小结 339
第20章 确保正确使用混合 341
20.1 创建和使用混合 343
20.1.1 创建和使用传统混合 344
20.1.2 创建和使用函数式混合 361
20.2 小结 367
第21章 测试高级程序架构 369
21.1 确保观察者模式的可靠使用 369
21.1.1 检查观察者模式 370
21.1.2 增强观察者模式的可靠性 376
21.2 确保中介者模式的可靠使用 380
21.2.1 了解中介者模式 381
21.2.2 增强基于中介者代码的可靠性 382
21.3 小结 395
第Ⅳ部分 测试中的特殊主题
第22章 测试DOM访问 399
22.1 对UI进行单元测试 399
22.1.1 检查难于测试的UI代码 400
22.1.2 使用TDD创建UI组件 401
22.2 使用分析器优化代码 411
22.2.1 检测低效代码 411
22.2.2 避免不成熟的优化 418
22.3 小结 418
第23章 确保符合标准 419
23.1 使用ESLint 420
23.1.1 安装ESLint 420
23.1.2 运行ESLint 424
23.1.3 使用ESLint实施代码标准 427
23.2 实施架构分离 432
23.2.1 家庭秘密技术 433
23.2.2 铭记技术 435
23.2.3 不可能任务Mission Impossible技术
437
23.2.4 魔术棒Magic Wand
技术 441
23.2.5 不要使用调用栈技术 442
23.2.6 其他技术 442
23.2.7 其他架构 442
23.3 小结 443
第Ⅴ部分 总结
第24章 测试驱动开发原则的总结 447
24.1 回顾值得使用测试驱动开发的原因 447
24.2 练习测试驱动开发 448
24.3 编写可单元测试的代码 448
24.4 掌握测试驱动开发的
技术 448
24.4.1 在编码之前编写测试 448
24.4.2 保持测试DRY 449
24.4.3 首先测试错误条件 449
24.4.4 测试要先易后难 449
24.4.5 具体 449
24.4.6 只测试一件事情 450
24.4.7 测试数据如同测试一样重要 450
24.4.8 高效地使用Jasmine 450
24.5 测试本书描述的模式 450
24.5.1 测试面向切面编程 450
24.5.2 测试对象构造 451
24.5.3 测试回调 451
24.5.4 测试基于承诺的代码 451
24.5.5 测试散函数应用程序 451
24.5.6 测试备忘录模式 452
24.5.7 测试单例模式 452
24.5.8 测试工厂模式 452
24.5.9 测试沙箱 452
24.5.10 测试装饰器模式 453
24.5.11 测试策略模式 453
24.5.12 测试代理模式 453
24.5.13 测试可链接方法 453
24.5.14 测试接口一致性 453
24.5.15 测试call和apply的
使用 453
24.5.16 测试方法借用模式 454
24.5.17 测试混合 454
24.5.18 测试中介者和观察者模式 454
24.5.19 测试DOM访问 454
24.5.20 实施架构分离的测试 454
24.6 小结 455
第25章 本书JavaScript习语的总结 457
25.1 回顾对象 457
25.1.1 可以添加和删除的对象属性 457
25.1.2 可以将对象用作词典 458
25.2 回顾变量 459
25.2.1 提升变量声明 459
25.2.2 变量有函数作用域 460
25.3 回顾函数 463
25.3.1 函数是对象 463
25.3.2 提升函数声明 463
25.3.3 函数没有返回类型 464
25.3.4 函数可以是匿名的 465
25.3.5 函数可以被嵌套 465
25.3.6 函数调用可以使用任意数量的参数 466
25.3.7 函数可以立即被调用 467
25.4 回顾布尔操作 468
25.4.1 在测试相等性时类型可能会被强制转换 468
25.4.2 值可以是真或假 469
25.5 小结 469
內容試閱

前 言
当我们与开发者同仁分享本书的书名《编写可靠的JavaScript代码》时,我们收到了如下反馈:
可靠的和JavaScript代码这两个词现在能放在一块?
这一定是一本非常薄的书。
我是否会在书店的小说区域John Grisham最近的惊悚小说附近找到它?
不,本书不是小说。
我们收到的关于本书书名的反馈表明了一些具有经典的、编译语言经验的开发者对于JavaScript的普遍看法:JavaScript被用于创建华丽的作品集网站或者简单的应用程序,它与任务关键的企业应用程序没有关系。
在过去这种观点是事实,但现在已经改变了。
JavaScript作为一流语言崛起
JavaScript作为野孩子的声誉是应得的,在接下来的两个小节中我们将揭示它的一些漏洞。不过,就像被宠坏的继承者一样,在继承了家族事业之后,通过提出挑战让所有人都感到震惊。但最近他变得严肃和负责,显示出真正伟大的能力。
JavaScript早期仅仅被托付一些短脚本任务。任务非常简单:如果所需的字段未被填充,就将它标记为红色;如果按钮被单击了,就应该将另一个页面带入视图。尽管它的责任有限,但易于相处。到今天为止,大多数程序员使用JavaScript的经验都是此类。
接着,在重新定义JavaScript的变革中,世界转向了Web。这一直是JavaScript游乐场,当The
Old Boys Club的成员在服务器上完成真正的工作时,他就在Web中娱乐自己。
在20世纪90年代末期,当微软引入iframes和XMLHTTP时,变革开始被阻碍。而当Google在2004年和2005年分别使Ajax成为Gmail应用程序和Google
Maps的一部分时,变革开始崩溃。世界突然注意到当浏览器被赋予更多任务时不只是显示服务器分配的内容,Web体验可以如此丰富。
所以JavaScript被赋予了更多的责任,超出了任何人的计划。JavaScript需要得到帮助。
此时帮助也应运而来,以工具包和框架的形式存在,例如jQuery、 Ext
JS、 Ember.js、
Knockout、Backbone和AngularJS。这些有价值的顾问完成了所有他们能做的事情,为JavaScript带来了准则和结构。
使用JavaScript编写真正糟糕的代码是非常简单的
问题的部分原因是JavaScript作为页面脚本语言存在多年。在那个有限的范围内,使用全局变量或全局函数并没有问题。如果变量拼写错误,影响非常有限、也易于追踪另外,影响可能是创建了另一个全局变量。如果架构非常草率那么有多少架构甚至可以只存在于一个Web页面上呢?
编译器的缺少隐藏了潜在的错误。使用C#或Java编写的服务器端程序在运行之前至少可以保证语法上是正确的。而JavaScript则必须启动,然后就只能预祝好运了。拼写错误的变量或者调用不存在的函数都可能潜伏在代码中数月之久,直到遵循了特定的执行路径。
接着就是JavaScript的怪癖,一些可爱的、疯狂的怪癖。
这个列表的顶部一定就是==使用类型强制转换的相等和===不使用类型强制转换的相等。这是一个好想法,但是对于主要使用其他语言的程序员来说是如此难以适应!
JavaScript拥有真和假的概念,它们让很多人感到糊涂。0是假值,因此多亏了类型强制转换type
coercion,表达式:
false == ''0''
的结果是真。值false被强制转换成一个数字,也就是0真被转换为1。接下来,字符串0也被强制转换成数字,也是0,所以表达式的结果是真。
不过,false ==
''false''的结果是假,因为左侧的false再次被强制转换成0,与右侧字符串false相比,也被强制转换成数字。因为false根本不是数字,所以第二个转换将产生NaNNot
a Number,相等性检测失败。
如果声明了下面的函数:
function letsHaveFunme, you {
Fun things happening between me and you
}
然后调用它,因此:
letsHaveFunme;
JavaScript将在变量you未定义的情况下执行调用,只是为了开心地看着你与某个不存在的人玩耍。
这个代码清单可以不断扩展下去。还有令人吃惊的作用域规则、独特的原型继承机制、自动的和有时不正确的分号插入、一个对象从另一个完全无关的对象借用函数的功能等

伴随着全局变量的不请自来、几乎完全缺少的架构设计、与真理的可疑关系以及比动漫大会上发现的更多的怪癖,JavaScript能做到如此好的地步真是一个奇迹。
无论你相信与否,它在变好之前会变得更糟糕。即使你是正确的,它也可能会非常容易出现问题。
JavaScript代码容易被无意间破坏
JavaScript有一种病态的幽默感。在一门稳重的编译语言中,如果有一行完全正确的调试代码在生产环境中运行得非常完美,例如:
myVariable = myObject.myProperty;
这时如果不小心碰到了键盘上的x键,那么它就变成了:
myVariable = myObject.myPropxerty;
编译器就会立即发出一条严厉的消息,警告下次一定要更加小心。而JavaScript则会高兴地运行该代码,并将undefined的值赋给myVariable。
当你希望改变属性的名称时,JavaScript喜欢玩捉迷藏。你可能会认为在整个源目录中搜索.myProperty就可以找到所有需要改动的地方。不,不,不!JavaScript笑着说。你忘了搜索[''myProperty'']。
实际上,应该使用正则表达式进行搜索,允许在括号和引号之间含有空格。你曾经这样做过吗?我们都没有。
你还应该搜索下面这样的结构:
var prop = ''myProperty'';
. . .
myObject[prop] = something;
即使是如此小的重构也很难完成,因此可以想象错误的产生是多么容易。不适合重构的代码几乎是单词脆弱的定义。
如何才能避免这些问题呢?如果有一个我们希望在本书进行宣扬并实践的概念,那么就是测试驱动开发。在不存在编译器的情况下,测试是针对错误的最佳防御。
JavaScript也更加适用于按照软件工程的规则进行开发。实际上,由于JavaScript具有创造性,因此比其他语言更需要这些规则。
我们见过许多开发人员都对这个信息抱着开放的态度,并且希望学习更多相关知识。我们希望你是其中一员。
本书面向的读者
因为本书不是一本JavaScript入门书籍,所以我们假设你已经有一些JavaScript经验。下面勾勒了本书理想读者的特点。
从其他语言转向JavaScript的开发人员
我们的职业生涯都不是从JavaScript开发人员开始的,可能也不是当JavaScript遇到大规模应用开发时才进入程序开发领域的。
JavaScript与我们曾经使用过的任何语言都大不相同。我们来自于编译的、静态类型语言C#的舒适世界。
当我们在保持C#程序员的架构和准则,并拥抱JavaScript的动态特性时,JavaScript就会容易掌握。
如果你具有使用JavaScript之外的语言例如C#或Java进行思考和编程的背景的话,本书是适合你的。数据结构和架构方面的知识将为你掌握JavaScript的大规模开发提供牢固的基础。
许多小节都演示了C#和Java中的语言特性例如继承和接口是如何对应于JavaScript中的功能的。我们还强调了JavaScript和其他语言之间的许多主要区别,例如作用域规则和类型强制转换相等性比较。掌握JavaScript功能和特性的相关知识将改善你用JavaScript思考的能力。
本书的另一个关注点是如何将C#和Java开发中更常见的软件工程概念和实践应用到JavaScript中,例如设计模式、单元测试和测试驱动开发。合理的软件工程可以缓和JavaScript的本性,创建可靠的和可维护的代码。
具有小规模JavaScript经验的开发人员
在我们努力为团队增加具有JavaScript经验的开发人员时,我们遇到了许多候选人,都觉得具有小规模JavaScript开发经验例如输入域验证和jQuery元素转换就值得将JavaScript列在简历的重要位置。
在面试中,判断这样的候选人不需要花费太多时间:可能在ASP.NET
Web Forms应用程序中,他们可以轻松地使用按钮处理程序,但是创建一个JavaScript模块,并在其中使用防止被外部操作的变量就比较困难了。
随着机构对JavaScript使用的进一步深化,我们对拥有JavaScript经验的定义也随之严格。数年之前,如果开发人员有点jQuery经验,我们就会对他的JavaScript经验非常满意了。
不过,现在我们需要更多的经验。使用JavaScript编写整个应用程序已经不再是凤毛麟角了。在所谓的单页面应用Single-Page
Application,SPA中,JavaScript代码将组成整个应用程序,与过去瞬间的单击处理程序相比,现在它承担着更多的责任。为了参与大规模JavaScript应用程序的开发,开发人员必须知道如何以结构化和规定的方式使用该语言,并同时使用它的许多独特功能和特性。
通过本书的样例,我们希望你小规模JavaScript开发人员能够参与大规模JavaScript应用程序的开发。
负责为新项目挑选编程语言的开发人员
可能你已经听过这个谚语:没有人会因为购买IBM产品而被解雇。这个谚语反映了一种感觉:在为IT项目选择技术合作伙伴时,选择稳定的、有信誉的公司例如IBM是不会受到质疑的。即使项目费用超支、逾期或完全失败,选择IBM也是无可指责的。
如果你正处于为新应用选择开发语言的位置,那么就处于与IT管理者选择技术合作伙伴一样的位置。有许多具有悠久历史并经过众人尝试和验证的语言,例如C#和Java,它们都是由大型、稳定的技术公司所支持的,已经被用于构建Web和桌面应用超过十年。没有人会因为选择C#被解雇。
从新程序设计项目的安全选择来看,尤其是企业级的项目,JavaScript明显与C#不同。JavaScript不是一门成熟、稳定、正式的编程语言。
与C#和Java这样的语言相比,它没有大规模软件项目的、长期的成功记录。这不是说使用C#和Java的项目就一定成功。不过,如果使用了其中一种语言的项目不成功,语言的选择可能不会被包含在失败的原因中。
如我们在之前小节中所提到的,使用JavaScript非常容易编写出灾难性的代码。这为它带来了一点糟糕的名声,降低了选择它的可能性。
不应该因为JavaScript的声誉而自动将它排除在项目的考虑之外,因为我们可以从它的强大功能中获益。Node.js一个服务器端的JavaScript引擎是轻量级的并且高度可伸缩的;对于实时和数据敏感应用程序来说是非常完美的选择。JavaScript可以被用于在浏览器中创建富用户界面。客户端框架例如Ember和AngularJS可以被用于构建完整的、基于浏览器的应用程序,可以通过将展示逻辑转移到客户端的方式减轻Web服务器的负担。
尽管我们不能保证它会成功,但是接下来的章节将展示如何通过应用我们在自己项目中所学到的教训,在下一个项目选择JavaScript时降低风险。
成功不是偶然的,尤其是在使用JavaScript时。它要求牢固掌握软件工程原则,这是第1章的主题。
本书的组织结构
我们将本书划分为5个部分。
第Ⅰ部分奠定坚实的基础涵盖了软件工程的关键概念,例如SOLID和DRY原则,还讨论了单元测试和测试驱动开发的优点。第Ⅰ部分还介绍了本书使用的工具和JavaScript库。最后,讨论了JavaScript中的对象和它们的可测试性。
在第Ⅱ部分测试基于模式的代码中,我们描述并使用测试驱动开发创建了几个有用的代码模式。其中一些模式例如单例可能与其他你所熟悉的语言中的模式类似。其他例如承诺主要是与JavaScript相关的。
第Ⅲ部分测试和编写高级JavaScript特性描述了如何使用和测试JavaScript语言更高级的特性。它还涵盖了使用了高级编程架构的应用的创建和测试,例如中介者和观察者模式。
第Ⅳ部分测试中的特殊主题提供了测试DOM操作的样例,还演示了用于增强代码标准的静态分析工具的使用。
第Ⅴ部分总结回顾了测试驱动开发的概念,还展示了一些本书用到的JavaScript习语。
使用本书所需的工具
为了运行本书的样例,需要使用下列工具:
● 文本编辑器
● Web浏览器
样例的源代码可以从Wrox网站下载:
www.wrox.comgoreliablejavascript
基于本书的开源软件可以在GitHub上找到:
www.github.comreliablejavascript
源代码
当你浏览本书的样例时,可能会选择手动输入所有代码,或者使用随书提供的源代码。本书使用的所有源代码都可以从www.wrox.com和www.tupwk.com.cndownpage下载。对于本书来说,代码下载文件在下面网址的Download
Code选项卡中:
www.wrox.comgoreliablejavascript
也可以在www.wrox.com中通过ISBN搜索本书找到代码。所有当前Wrox图书的代码下载的完整文件列表在www.wrox.comdynamicbooksdownload.aspx
中。
www.wrox.com的大多数代码都采用.ZIP、.RAR或者适用于特定平台的类似归档模式进行了压缩。下载了代码之后,只需要使用适当的压缩工具解压即可。
注意:
因为许多书都有相似的书名,所以你可能发现使用ISBN搜索是最容易的;本书英文版的ISBN是978-1-119-02872-7。

勘误表
尽管我们竭尽所能来确保在正文和代码中没有错误,但人无完人,错误难免会发生。如果你在Wrox出版的书中发现了错误例如拼写错误或代码错误,我们将非常感谢你的反馈。发送勘误表将节省其他读者的时间,同时也会帮助我们提供更高质量的信息。
要找到本书的勘误页面,可以进入www.wrox.com,使用Search搜索框或书名列表找到本书,然后在本书的详细信息页面上单击Book
Errata链接。在这个页面上可以查看为本书提交的、Wrox编辑粘贴上去的所有错误。完整的书名列表包括每本书的勘误表也可以从www.wrox.commisc-pagesbooklist.shtml上获得。
如果在本书的勘误页面上没有看到你发现的错误,则可以到www.wrox.comcontact techsupport.shtml
上填写表单,把你发现的错误发给我们。我们会检查这些信息,如果属实,就把它添加到本书的勘误页面上,并在本书随后的版本中更正错误。
p2p.wrox.com
如果想和作者或同行进行讨论,请加入p2p.wrox.com
上的P2P论坛。该论坛是一个基于Web的系统,你可以发布有关Wrox图书及相关技术的消息,与其他读者或技术人员交流。该论坛提供了订阅功能,当你感兴趣的主题有新帖子发布时,系统会邮件通知。Wrox的作者、编辑、其他业界专家和像你一样的读者都会出现在这些论坛中。
在p2p.wrox.com网站上,你会找到很多不同的论坛,它们不但有助于你阅读本书,还有助于你开发自己的应用程序。加入论坛的步骤如下:
1 进入p2p.wrox.com,单击Register链接。
2 阅读使用条款,然后单击Agree按钮。
3 填写加入该论坛必需的信息和其他你愿意提供的信息,单击Submit按钮。
4 你将收到一封电子邮件,描述如何验证你的账户和完成加入过程。





加入之后,就可以发布新的消息和回复其他用户发布的消息。可以随时在Web上阅读论坛里的消息。如果想让某个论坛的新消息以电子邮件的方式发给你,可以单击论坛列表中论坛名称旁边的Subscribe
to this Forum图标。
要了解如何使用Wrox P2P的更多信息,请阅读P2P
FAQ,其中回答了论坛软件如何使用的问题,以及许多与P2P和Wrox图书相关的问题。要阅读FAQ,单击任何P2P页面上的FAQ链接即可。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.