內 容 提 要 本書講解了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