<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                目錄 譯者序 前言 致謝 關于作者 #### 第一部分 測試驅動開發 ##### 第1章 自動化測試 1 1.1 單元測試 1 1.1.1 單元測試框架 2 1.1.2 JavaScript日期函數strftime 2 1.2 斷言 5 1.3 測試函數、用例和套件 7 1.4 集成測試 10 1.5 單元測試的好處 12 1.5.1 回歸測試 12 1.5.2 重構 12 1.5.3 跨瀏覽器的測試 13 1.5.4 其他的一些好處 13 1.6 單元測試中的陷阱 13 1.7 小結 13 ##### 第2章 測試驅動開發的過程 15 2.1 測試驅動開發的目的與目標 15 2.1.1 開發順序的顛倒 15 2.1.2 測試驅動開發中的設計 15 2.2 過程 16 2.2.1 步驟1:編寫一個測試 17 2.2.2 步驟2:觀看測試失敗 17 2.2.3 步驟3:使測試通過 18 2.2.4 步驟4:重構以消除冗余 20 2.2.5 打肥皂、沖洗、重復 20 2.3 讓測試驅動開發簡便易行 21 2.4 測試驅動開發的好處 21 2.4.1 有效的代碼 21 2.4.2 遵循單一職責原則 22 2.4.3 強制有意識的開發 22 2.4.4 提高生產效率 22 2.5 小結 22 ##### 第3章 行業工具 23 3.1 xUnit測試框架 23 3.1.1 行為驅動開發 23 3.1.2 持續集成 23 3.1.3 異步測試 24 3.1.4 xUnit測試框架的特點 24 3.1.5 斷言 25 3.1.6 依賴關系 25 3.2 瀏覽器內的測試框架 26 3.2.1 YUI Test 26 3.2.2 其他瀏覽器內的測試框架 28 3.3 無頭測試框架 29 3.3.1 交叉檢查 29 3.3.2 Rhino與env.js 29 3.3.3 無頭測試框架的缺點 30 3.4 一個掌管一切的測試運行器 30 3.4.1 JsTestDriver是怎樣工作的 30 3.4.2 JsTestDriver的缺點 31 3.4.3 安裝 31 3.4.4 在IDE里使用JsTestDriver 35 3.4.5 提高命令行效率 36 3.4.6 斷言 37 3.5 小結 38 ##### 第4章 從測試中學習 39 4.1 用單元測試探索JavaScript 39 4.1.1 觀察法編程的缺陷 41 4.1.2 學習測試的最佳點 41 4.2 性能測試 42 4.2.1 基準和相對性能 43 4.2.2 性能評測和定位瓶頸 50 4.3 小結 51 #### 第二部分 開發人員的JavaScript ##### 第5章 函數 53 5.1 定義函數 53 5.1.1 函數聲明 53 5.1.2 函數表達式 54 5.1.3 Function構造器 55 5.2 調用函數 56 5.2.1 arguments對象 56 5.2.2 形參和arguments 57 5.3 作用域和執行上下文 58 5.3.1 執行上下文 59 5.3.2 變量對象 59 5.3.3 活動對象 60 5.3.4 全局對象 60 5.3.5 作用域鏈 61 5.3.6 再訪函數表達式 62 5.4 this關鍵字 64 5.4.1 隱式地設置this 65 5.4.2 顯式地設置this 65 5.4.3 使用原初類型當做this 66 5.5 小結 67 ##### 第6章 函數和閉包的應用 68 6.1 綁定函數 68 6.1.1 this被丟棄:一個Lightbox的例子 68 6.1.2 通過一個匿名函數解決this問題 69 6.1.3 Function.prototype.bind 70 6.1.4 綁定參數 71 6.1.5 局部套用 73 6.2 被立即調用的匿名函數 74 6.2.1 Ad Hoc作用域 74 6.2.2 命名空間 76 6.3 狀態函數 79 6.3.1 生成唯一的標識符 79 6.3.2 迭代器 81 6.4 記憶 84 6.5 小結 86 ##### 第7章 對象和原型繼承 87 7.1 對象和屬性 87 7.1.1 屬性訪問 88 7.1.2 原型鏈 89 7.1.3 通過原型鏈實現對象擴展 90 7.1.4 可枚舉屬性 91 7.1.5 屬性的特性 94 7.2 使用構造器創建對象 98 7.2.1 prototype和[[Prototype]] 98 7.2.2 使用new創建對象 98 7.2.3 構造器原型 99 7.2.4 構造器的問題 102 7.3 偽經典結構的繼承 103 7.3.1 繼承函數 104 7.3.2 訪問[[Prototype]] 105 7.3.3 實現super 105 7.4 封裝和信息隱藏 110 7.4.1 私有方法 110 7.4.2 私有成員和特權方法 112 7.4.3 函數式繼承 113 7.5 對象組合和混搭體 115 7.5.1 Object.create方法 115 7.5.2 tddjs.extend方法 117 7.5.3 混搭體 120 7.6 小結 121 ##### 第8章 ECMAScript 5 122 8.1 JavaScript不遠的未來 122 8.2 對象模型的更新 123 8.2.1 屬性的特性 123 8.2.2 原型繼承 125 8.2.3 Getter和Setter 127 8.2.4 使用屬性的特性 128 8.2.5 作為屬性標識符的保留關鍵字 131 8.3 嚴格模式 131 8.3.1 啟用嚴格模式 131 8.3.2 嚴格模式帶來的改變 132 8.4 各種新內容及改進 134 8.4.1 原生的JSON 134 8.4.2 Function.prototype.bind 135 8.4.3 關于數組 135 8.5 小結 135 ##### 第9章 不唐突的JavaScript 137 9.1 不唐突的JavaScript的目標 137 9.2 不唐突的JavaScript的規則 138 9.2.1 唐突的標簽式面板 138 9.2.2 簡潔的標簽式面板標記 140 9.2.3 TDD和漸進增強 141 9.3 不要做任何假設 141 9.3.1 不要假設只有你一個人 141 9.3.2 不要假設標記是正確的 142 9.3.3 不要假設所有用戶的需求都一樣 142 9.3.4 不要假設支持 142 9.4 規則何時適用 143 9.5 不唐突的標簽式面板的例子 143 9.5.1 建立測試 143 9.5.2 tabController對象 145 9.5.3 activateTab方法 147 9.5.4 使用標簽控制器 149 9.6 小結 152 ##### 第10章 特性檢測 154 10.1 瀏覽器嗅探 154 10.1.1 用戶代理嗅探 154 10.1.2 對象檢測 155 10.1.3 瀏覽器嗅探的狀態 156 10.2 正確使用對象檢測 156 10.2.1 檢查對象是否存在 156 10.2.2 類型檢查 157 10.2.3 原生和宿主對象 157 10.2.4 使用測試樣例 160 10.2.5 何時測試 161 10.3 特性檢測DOM事件 161 10.4 特性檢測CSS屬性 163 10.5 跨瀏覽器事件處理例程 164 10.6 使用特性檢測 167 10.6.1 向前進 167 10.6.2 無法檢測到的特性 167 10.7 小結 168 #### 第三部分 JavaScript測試驅動開發實踐 ##### 第11章 觀察者模式 169 11.1 JavaScript中的觀察者 169 11.1.1 觀察物庫 170 11.1.2 設置環境 170 11.2 添加觀察者 171 11.2.1 第一個測試 171 11.2.2 重構 173 11.3 檢查觀察者 174 11.3.1 測試 175 11.3.2 重構 177 11.4 通知觀察者 177 11.4.1 確保觀察者被調用 177 11.4.2 傳遞參數 178 11.5 錯誤處理 179 11.5.1 添加假的觀察者 179 11.5.2 有問題的觀察者 180 11.5.3 記錄調用順序 181 11.6 觀察任意對象 182 11.6.1 讓構造器成為過去式 183 11.6.2 用對象來替換構造器 185 11.6.3 重命名方法 186 11.7 觀察任意事件 187 11.7.1 支持observe中的事件 187 11.7.2 支持notify中的事件 188 11.8 小結 191 ##### 第12章 抽象化瀏覽器區別:Ajax 192 12.1 以測試驅動來開發一個請求API 192 12.1.1 發現瀏覽器的不一致 192 12.1.2 開發策略 192 12.1.3 目標 193 12.2 實現請求接口 193 12.2.1 項目布局 193 12.2.2 選擇接口風格 194 12.3 創建一個XMLHttpRequest對象 194 12.3.1 第一個測試 194 12.3.2 XMLHttpRequest背景知識 195 12.3.3 實現tddjs.ajax.create 196 12.3.4 更強的特性檢測 197 12.4 編寫Get請求 198 12.4.1 需要一個URL 198 12.4.2 為XMLHttpRequest對象 創建樁 199 12.4.3 處理狀態的變化 205 12.4.4 處理狀態變化 206 12.5 使用Ajax API 209 12.5.1 集成測試 210 12.5.2 測試結果 211 12.5.3 微妙的麻煩 212 12.5.4 本地請求 213 12.5.5 測試狀態 214 12.6 發出POST請求 217 12.6.1 為POST做準備 217 12.6.2 發送數據 220 12.6.3 設置請求頭信息 225 12.7 重審請求API 225 12.8 小結 229 ##### 第13章 使用Ajax和Comet將數據流式化 230 13.1 數據輪詢 230 13.1.1 項目結構 230 13.1.2 輪詢器:tddjs.ajax.poller 231 13.1.3 定時器測試 238 13.1.4 可配置的頭和回調 242 13.1.5 單行接口 245 13.2 Comet 247 13.2.1 永不消失的框架 247 13.2.2 流式化XMLHttpRequest 248 13.2.3 HTML5 248 13.3 長輪詢的XMLHttpRequest 248 13.3.1 實現長輪詢支持 248 13.3.2 避免緩存問題 251 13.3.3 特性檢測 252 13.4 Comet客戶端 252 13.4.1 消息格式 253 13.4.2 介紹ajax.cometClient 254 13.4.3 分發數據 255 13.4.4 添加觀察者 258 13.4.5 服務器連接 259 13.4.6 跟蹤請求和接收到的數據 264 13.4.7 發布數據 267 13.4.8 特性檢測 267 13.5 小結 267 ##### 第14章 基于Node.js的服務器端 JavaScript 269 14.1 Node.js運行時環境 269 14.1.1 環境設置 269 14.1.2 起點 271 14.2 控制器 272 14.2.1 CommonJS規則模塊 272 14.2.2 定義模塊:首測 272 14.2.3 建立控制器 273 14.2.4 基于POST方式添加消息 274 14.2.5 對請求做出響應 280 14.2.6 將應用程序用于實踐 281 14.3 域模型和存儲器 283 14.3.1 創建聊天室 283 14.3.2 Node中的輸入輸出 283 14.3.3 添加聊天信息 283 14.3.4 獲取聊天信息 287 14.4 Promises 290 14.4.1 用promise重構addMessage方法 291 14.4.2 使用promise對象 294 14.5 事件產生器 295 14.5.1 讓chatRoom對象成為一個事件產生器 295 14.5.2 等待聊天信息 297 14.6 回到控制器 300 14.6.1 完成Post方法 300 14.6.2 通過GET方法輸出數據流 302 14.6.3 響應頭和響應體 307 14.7 小結 308 ##### 第15章 TDD與DOM操作:聊天室客戶端程序 309 15.1 客戶端的藍圖 309 15.1.1 目錄結構 309 15.1.2 選擇方法 310 15.2 用戶表單 311 15.2.1 視圖的設置 311 15.2.2 處理提交事件 316 15.2.3 特征測試 324 15.3 用Node.js后端使用客戶端 325 15.4 聊天信息列表 327 15.4.1 設置模型 327 15.4.2 設置視圖 330 15.4.3 添加聊天信息 331 15.4.4 來自同一用戶的重復內容 334 15.4.5 特征測試 335 15.4.6 動手實驗 335 15.5 聊天信息表單 336 15.5.1 建立測試用例 337 15.5.2 設置視圖 337 15.5.3 發布聊天信息 339 15.5.4 特征測試 342 15.6 聊天室客戶端的最終版本 343 15.6.1 收尾工作 344 15.6.2 部署時的注意事項 346 15.7 小結 347 #### 第四部分 測試模式 ##### 第16章 模擬對象和創建樁 349 16.1 測試替身概述 349 16.1.1 特技替身 349 16.1.2 假對象 350 16.1.3 啞對象 350 16.2 測試驗證 351 16.2.1 狀態驗證 351 16.2.2 行為驗證 351 16.2.3 驗證策略的作用 352 16.3 樁 352 16.3.1 使用樁來避免不方便的接口 352 16.3.2 使用樁讓系統通過特定代碼路徑 353 16.3.3 使用樁來制造麻煩 353 16.4 測試間諜 354 16.4.1 測試間接輸入 354 16.4.2 檢測調用細節 355 16.5 使用樁庫 355 16.5.1 創建樁函數 355 16.5.2 給方法創建樁 356 16.5.3 內建行為驗證 358 16.5.4 創建樁和Node.js 359 16.6 模擬對象 360 16.6.1 恢復被模擬的函數 360 16.6.2 匿名的模擬對象 361 16.6.3 多重期望 361 16.6.4 對this值的期望 362 16.7 模擬對象還是樁 363 16.8 小結 364 #### 第17章 編寫良好的單元測試 365 17.1 提高可讀性 365 17.1.1 清楚地命名測試以表明意圖 365 17.1.2 用設置、應用和驗證塊對測試進行結構化 367 17.1.3 使用更高級的抽象保持測試的簡單性 367 17.1.4 減少重復,而不是減少明確性 369 17.2 將測試作為行為規范 370 17.2.1 一次只測試一種行為 370 17.2.2 每個行為只測試一次 371 17.2.3 在測試中隔離行為 371 17.3 與測試中的缺陷做斗爭 373 17.3.1 在測試通過之前運行它們 373 17.3.2 首先編寫測試 374 17.3.3 攪亂和破壞代碼 374 17.3.4 使用JsLint 374 17.4 小結 375 ##### 參考文獻 376
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看