簡介
本書是JavaScript實戰指南,主要內容包括:JavaScript性能、可靠性、穩定性和代碼管理分析,面向對象代碼的使用,測試和錯誤處理機制的構建,用AMD和RequireJS管理代碼依賴,移動端、遊戲和實時通信的JavaScript開發,等等。
目錄
第1章 面向對象的JavaScript 1
1.1 JavaScript中的對象 1
1.1.1 定製對象 1
1.1.2 類 2
1.2 代碼規範和命名 22
1.2.1 規則1:使用描述性的名字 22
1.2.2 規則2:以小寫字母開頭 23
1.2.3 規則3:使用駱駝命名法來分割單詞 23
1.2.4 規則4:全局常量使用全大寫的名字 23
1.2.5 規則5:集中在一個語句中聲明函式體的所有變數並將其置於函式體頂部 24
1.3 ECMAScript 5 26
1.3.1 JSON數據格式解析 27
1.3.2 嚴格模式 27
1.3.3 函式綁定 28
1.3.4 數組方法 29
1.3.5 對象方法 31
1.4 小結 34
第2章 JavaScript文檔 35
2.1 行內和塊級注釋 35
2.2 結構化的JavaScript文檔 36
2.3 YUIDoc文檔格式 36
2.3.1 為“類”、構造器、屬性和
方法添加文檔 37
2.3.2 為事件添加文檔 45
2.3.3 為代碼示例添加文檔 45
2.3.4 其他YUIDoc文檔標籤 46
2.4 更具表達性的文檔格式——
Markdown 46
2.4.1 用標題來組織內容 46
2.4.2 換行以及創建段落 47
2.4.3 創建列表 48
2.4.4 強調文本 50
2.4.5 顯示代碼 51
2.4.6 添加引用 51
2.4.7 添加URL連結 52
2.4.8 插入圖片 53
2.4.9 生成水平分割線 53
2.4.10 用反斜槓來插入保留字元 53
2.4.11 對於其他內容,可以使用HTML 54
2.5 使用YUIDoc創建一個文檔網站 54
2.6 小結 59
第3章 編寫高質量的JavaScript 60
3.1 進行靜態代碼分析 60
3.1.1 JSLint 60
3.1.2 JSHint 64
3.1.3 Google Closure Compiler和Closure Linter 65
3.1.4 選擇一個靜態代碼分析工具 66
3.2 JavaScript中的單元測試 67
3.2.1 JavaScript的單元測試框架 67
3.2.2 使用Jasmine來進行
JavaScript單元測試 68
3.3 處理運行時錯誤 74
3.3.1 JavaScript的原生錯誤類型 75
3.3.2 將可能出錯的代碼放入try-catch語句中 75
3.3.3 檢測錯誤類型 77
3.3.4 自定義錯誤類型 77
3.4 度量代碼質量 79
3.4.1 單元測試的代碼覆蓋度 79
3.4.2 度量代碼複雜度 81
3.5 小結 84
第4章 增強JavaScript性能 85
4.1 最佳化頁面載入時間 85
4.1.1 HTML標籤順序 85
4.1.2 JavaScript 檔案的GZip編碼
傳輸 85
4.1.3 縮編、混淆和編譯 86
4.1.4 請求時才延遲載入JavaScript檔案 90
4.2 最佳化文檔對象的操作 91
4.2.1 實現對頁面元素的最小化訪問 92
4.2.2 儘量利用已有元素 92
4.2.3 離線DOM的利用 93
4.2.4 使用CSS而非JavaScript來操控頁面樣式 94
4.3 提升DOM事件性能 95
4.3.1 委託事件至父元素 95
4.3.2 使用框架化處理頻密發出的
事件 96
4.4 提升函式性能 97
4.5 使用正則表達式實現更快速的字元串
操作 100
4.6 更快速地使用數組 102
4.6.1 快速創建數組 103
4.6.2 快速進行數組循環 103
4.7 轉移密集型任務至Web Worker 106
4.8 簡單的性能測量 110
4.9 小結 111
第5章 設計模式:創建型 112
5.1 什麼是設計模式 112
5.2 創建型設計模式 113
5.2.1 工廠模式 113
5.2.2 抽象工廠模式 116
5.2.3 生成器模式 120
5.2.4 原型模式 122
5.2.5 單例模式 124
5.3 小結 128
第6章 設計模式:結構型 129
6.1 適配器模式 129
6.2 組合模式 132
6.3 裝飾模式 133
6.4 外觀模式 135
6.5 享元模式 137
6.6 摻合模式 143
6.7 模組模式 147
6.8 代理模式 150
6.9 小結 153
第7章 設計模式:行為型 154
7.1 職責鏈模式 154
7.2 命令模式 157
7.3 疊代器模式 160
7.4 觀察者模式 163
7.5 中介者模式 167
7.6 備忘錄模式 171
7.7 承諾模式 173
7.8 策略模式 184
7.9 小結 188
第8章 設計模式:架構型 189
8.1 MVC模式 189
8.2 MVP模式 197
8.3 MVVM模式 203
8.4 架構型模式框架 208
8.5 小結 209
第9章 代碼檔案依賴管理 210
9.1 使用RequireJS進行代碼檔案依賴
管理 210
9.2 載入、初始化RequireJS 215
9.3 模組名稱的別名 217
9.4 內容分發網路和後備 217
9.5 建立模組 218
9.6 於請求時才載入額外的腳本 220
9.7 RequireJS代碼最佳化工具 221
9.8 RequireJS的附加外掛程式 221
9.9 RequireJS的代替品 222
9.10 小結 223
第10章 移動設備JavaScript開發 224
10.1 移動Web開發的局限性 224
10.1.1 電池續航能力 224
10.1.2 網路頻寬速度與延時 225
10.1.3 板載記憶體容量 225
10.1.4 作業系統回響能力 226
10.2 通過JavaScript訪問移動設備上的
感測器 227
10.2.1 訪問地理位置定位感測器 228
10.2.2 訪問觸摸感測器 230
10.2.3 訪問姿態感測器和方向感測
器 232
10.2.4 訪問運動感測器 235
10.2.5 未能訪問的感測器 237
10.2.6 事件框架化與感測器數據 237
10.2.7 利用感測器數據進一步發
揮 238
10.3 網路連線故障與離線狀態 238
10.3.1 線上與離線狀態的檢測 239
10.3.2 利用Web Storage API長期
保存數據 241
10.3.3 HTML5 Application Cache 244
10.4 回響式(自適應)網頁設計的
JavaScript 246
10.5 小結 247
第11章 使用CanvasAPI創建遊戲 248
11.1 在Canvas中的基本繪圖操作 248
11.2 高清Canvas元素 251
11.3 使用Canvas 製作遊戲 251
11.3.1 在Canvas 上繪製圖像 252
11.3.2 Canvas 中的動畫 253
11.3.3 遊戲的控制 254
11.3.4 碰撞檢測 256
11.3.5 遊戲主循環 257
11.3.6 分層Canvas以提高性能 258
11.4 在Canvas 中製作Frogger遊戲 258
11.5 小結 299
第12章 使用WebRTC實現視頻聊天 300
12.1 WebRTC規範 300
12.2 訪問網路攝像頭和麥克風 300
12.3 建立一個簡單的視頻聊天網頁套用
程式 303
12.4 創建視頻聊天客戶端 307
12.5 小結 317
第13章 客戶端模板引擎的使用 318
13.1 動態更新頁面內容 318
13.2 通過Ajax動態載入HTML 319
13.3 在客戶端套用模板 320
13.3.1 不依賴庫實現客戶端模板 321
13.3.2 使用Mustache.js模板引擎
實現客戶端模板 323
13.3.3 使用Handlebars.js引擎實
現客戶端模板 330
13.3.4 作為替換的其他客戶端模
板引擎庫 341
13.4 考慮漸進增強 344
13.5 小結 345
第14章 Node.js套用平台 346
14.1 Node.js安裝 346
14.2 編寫Node.js應用程式 347
14.2.1 console對象 348
14.2.2 載入模組 349
14.3 Node.js軟體包 351
14.4 劃分Node.js應用程式分布至多個
檔案 356
14.5 用於網頁應用程式的Node.js框架 357
14.5.1 Express框架 357
14.5.2 Socket.IO 360
14.6 Node.js應用程式的託管 365
14.7 小結 365
第15章 構建工具及自動化 366
15.1 構建工具 366
15.1.1 Grunt——JavaScript任務
運行器 367
15.1.2 Gulp.js——“流式”構建
系統 374
15.1.3 使用構建工具來使常規任
務實現自動化 377
15.2 第三方庫和框