内 容 提 要 本书讲解了JavaScript框架设计及相关的知识,主要内容包括种子模块、语言模块、浏览器嗅探与特征侦测、类工厂、选择器引擎、节点模块、数据缓存模块、样式模块、属性模块、PC端和移动端的事件系统、jQuery的事件系统、异步模型、数据交互模块、动画引擎、MVVM、前端模板(静态模板)、MVVM的动态模板、性能墙与复杂墙、组件、jQuery时代的组件方案、avalon2的组件方案、react的组件方案等。 本书适合前端设计人员、JavaScript开发者、移动UI设计者、程序员和项目经理阅读,也可作为相关专业学习用书和培训学校教材。
引导读者了解近10年来大师们打造的优良框架以及其中令人称道的奇思妙想 更深入、更彻底地认识JavaScript,领略jQuery等库的架构之美和设计之美 帮助开发者高屋建瓴地打造适合自己的前端框架
钟钦成 网名司徒正美,著名的JavaScript专家,立志做考古学家的日语系工程师,穿梭于二次元与二进制间的“魔法师”,做过陶艺,写过小说,涉猎Java、Ruby、 JavaScript,3年成就此书!
目 录
第1章种子模块 1
1.1模块化 1
1.2功能介绍 2
1.3对象扩展 3
1.4数组化 5
1.5类型的判定 8
1.5.1type 12
1.5.2isPlainObject 13
1.5.3isWindow 14
1.5.4isNumeric 15
1.5.5isArrayLike 16
1.6domReady 17
1.7无冲突处理 20
1.8总结 20
第2章语言模块 21
2.1字符串的扩展与修复 22
2.1.1repeat 24
2.1.2byteLen 26
2.1.3pad 30
2.1.4quote 32
2.1.5trim与空白 33
2.2数组的扩展与修复 37
2.3数值的扩展与修复 45
2.4函数的扩展与修复 48
2.5日期的扩展与修复 53
第3章浏览器嗅探与特征侦测 57
3.1浏览器判定 58
3.2document.all趣闻 61
3.3事件的支持侦测 62
3.4样式的支持侦测 65
3.5jQuery一些常用特征的含义 65
第4章类工厂 68
4.1JavaScript对类的支撑 68
4.2各种类工厂的实现 73
4.2.1相当精巧的库—P.js 74
4.2.2JS.Class 76
4.2.3simple-inheritance 78
4.2.4体现JavaScript灵活性的
库—def.js 81
4.3进击的属性描述符 85
4.4真类降临 93
第5章选择器引擎 102
5.1浏览器内置的寻找元素的方法 103
5.2getElementsBySelector 105
5.3选择器引擎涉及的知识点 108
5.3.1关系选择器 109
5.3.2伪类 111
5.3.3其他概念 113
5.4选择器引擎涉及的通用函数 114
5.4.1isXML 114
5.4.2contains 115
5.4.3节点排序与去重 117
5.4.4切割器 121
5.4.5属性选择器对于空白字符的
匹配策略 123
5.4.6子元素过滤伪类的分解与
匹配 125
5.5Sizzle引擎 127
5.6总结 135
第6章节点模块 136
6.1节点的创建 136
6.2节点的插入 142
6.3节点的复制 144
6.4节点的移除 148
6.5节点的移除回调实现 151
6.5.1Mutation Observer 152
6.5.2更多候选方案 153
6.6innerHTML、innerText、outerHTML、
outerText的兼容处理 157
6.7模板容器元素 161
6.8iframe元素 162
6.9总结 165
第7章数据缓存模块 166
7.1jQuery的第1代缓存系统 166
7.2jQuery的第2代缓存系统 172
7.3jQuery的第3代缓存系统 175
7.4有容量限制的缓存系统 176
7.5本地存储系统 178
7.6总结 184
第8章样式模块 185
8.1主体架构 186
8.2样式名的修正 189
8.3个别样式的特殊处理 190
8.3.1opacity 190
8.3.2user-select 192
8.3.3background-position 192
8.3.4z-index 193
8.3.5盒子模型 194
8.3.6元素的尺寸 195
8.3.7元素的显隐 201
8.3.8元素的坐标 203
8.4元素的滚动条的坐标 209
8.5总结 210
第9章属性模块 211
9.1元素节点的属性 212
9.2如何区分固有属性与自定义
属性 214
9.3如何判定浏览器是否区分固有
属性与自定义属性 216
9.4IE的属性系统的3次演变 217
9.5className的操作 218
9.6Prototype.js的属性系统 221
9.7jQuery的属性系统 226
9.8avalon的属性系统 229
9.9value的操作 232
9.10总结 235
第10章PC端的事件系统 236
10.1原生API简介 238
10.2on×××绑定方式的缺陷 239
10.3attachEvent的缺陷 239
10.4addEventListener的缺陷 241
10.5handleEvent与
EventListenerOptions 242
10.6Dean Edward大神的addEvent.js
源码分析 243
10.7jQuery的事件系统 246
10.8avalon2的事件系统 248
10.9总结 254
第11章移动端的事件系统 255
11.1touch系事件 256
11.2gesture系事件 258
11.3tap系事件 259
11.4press系事件 268
11.5swipe系事件 271
11.6pinch系事件 273
11.7拖放系事件 276
11.8rotate系事件 279
11.9总结 282
第12章异步模型 283
12.1setTimeout与setInterval 284
12.2Promise诞生前的世界 287
12.2.1回调函数callbacks 287
12.2.2观察者模式observers 287
12.2.3事件机制listeners 289
12.3JSDeferred里程碑 289
12.4jQuery Deferred宣教者 299
12.5es6 Promise及时个标准模型 303
12.5.1 构造函数:Promise
( executor ) 308
12.5.2 Promise.resolve/reject 309
12.5.3 Promise.all/race 309
12.5.4 Promise#then/catch 310
12.5.5 Promise#resolve/reject 310
12.5.6 Promsie#notify 311
12.5.7 nextTick 312
12.6es6生成器过渡者 314
12.6.1 关键字yield 315
12.6.2 yield和yield的区别 316
12.6.3 异常处理 317
12.7es7 async/await终极方案 319
12.8 总结 321
第13章数据交互模块 323
13.1Ajax概览 323
13.2优雅地取得XMLHttpRequest
对象 324
13.3XMLHttpRequest对象的事件
绑定与状态维护 326
13.4发送请求与数据 328
13.5接收数据 330
13.6上传文件 333
13.7jQuery.ajax 335
13.8fetch,下一代Ajax 340
第14章动画引擎 344
14.1动画的原理 344
14.2缓动公式 347
14.3jQuery.animate 349
14.4mass Framework基于JavaScript的
动画引擎 350
14.5requestAnimationFrame 358
14.6CSS3 transition 364
14.7CSS3 animation 368
14.8mass Framework基于CSS的动画
引擎 370
第15章MVVM 378
15.1前端模板(静态模板) 378
15.2MVVM的动态模板 388
15.2.1求值函数 390
15.2.2刷新函数 395
15.3ViewModel 399
15.3.1Proxy 400
15.3.2Reflect 401
15.3.3avalon的ViewModel
设计 403
15.3.4angular的ViewModel
设计 407
15.4React与虚拟DOM 412
15.4.1React的diff算法 415
15.4.2React的多端渲染 417
15.5性能墙与复杂墙 417
第16章组件 422
16.1jQuery时代的组件方案 422
16.2avalon2的组件方案 427
16.2.1组件容器 429
16.2.2配置对象 430
16.2.3slot机制 430
16.2.4soleSlot机制 431
16.2.5生命周期 432
16.3React的组件方案 433
16.3.1React组件的各种定义
方式 433
16.3.2React组件的生命周期 439
16.3.3React组件间通信 441
16.3.4React组件的分类 445
16.4前端路由 446
16.4.1 storage 447
16.4.2 mmHistory 448
16.4.3 mmRouter 454
彩蛋 458