內容簡介
《JavaScript設計模式》共有兩部分。第一部分給出了實現具體設計模式所需要的面向對象特性的基礎知識,主要包括接口、封裝和信息隱藏、繼承、單體模式等內容。第二部分則專注於各種具體的設計模式及其在JavaScript語言中的套用,主要介紹了工廠模式、橋接模式、組合模式、門面模式等幾種常見的模式。為了讓每一章中的示例都儘可能地貼近實際套用,書中同時列舉了一些JavaScript程式設計師最常見的任務,然後運用設計模式使其解決方案變得更模組化、更高效並且更易維護,其中較為理論化的例子則用於闡明某些要點。《JavaScript設計模式》適合各層次的Web前端開發人員閱讀和參考,也適合有C++/Java/C#背景的伺服器端程式設計師學習。
作者簡介
RossHarmes,資深Web程式設計師,有10多年編程經驗。現任Yahoo前端工程師。他是開源圖片部落格軟體birch的開發者。
DustinDiaz,資深Web程式設計師,現任Google用戶界面工程師。新一代JavaScript框架DEDlChain(兼具jQuery和YUI的優勢)的開發者。他還是一位中長跑健將,800米跑曾經在全美國排名第13。擁有西班牙語學士學位。
編輯推薦
《JavaScript設計模式》中,Google和Yahoo公司的兩位資深Web專家對此給出了擲地有聲的肯定回答。作者針對常見的開發任務,從YUI等實戰代碼中取材,提供了專家級的解決方案,不僅透徹剖析了JavaScript扣的面向對象編程,而且深入探討了如何用JavaScript實現以前只在伺服器端套用的設計模式,如何根據實際場景選擇恰當的設計模式,開發出高質量的企業級代碼。《JavaScript設計模式》充分證明:JavaScript不僅毫不遜色於其他高級語言,已經是一種成熟且強大的面向對象語言,而且還擁有Java和C++等語言不具備的面向未來的特性,因此更加靈活、更富於表現力。
Web套用取代桌面程式的時代已經到來!作為Web前端的核心技術,JavaScript的重要性不言而喻,它有望成為下一代統治性程式語言。但由於業界長期的誤解和濫用,也有不少人仍然對此半信半疑。那么,JavaScript到底能否當此大任呢?無論是前端工程師,還是伺服器端程式設計師,通過《JavaScript設計模式》都將使自己的JavaScript功力提升到前所未有的高度。
目錄
第一部分面向對象的JavaScript
第1章富有表現力的JavaScript
1.1JavaScript的靈活性
1.2弱類型語言
1.3函式是一等對象
1.4對象的易變性
1.5繼承
1.6JavaScript中的設計模式
1.7小結
第2章接口
2.1什麼是接口
2.1.1接口之利
2.1.2接口之弊
2.2其他面向對象語言處理接口的方式
2.3在JavaScript中模仿接口
2.3.1用注釋描述接口
2.3.2用屬性檢查模仿接口
2.3.3用鴨式辨型模仿接口
2.4本書採用的接口實現方法
2.5Interface類
2.5.1Interface類的使用場合
2.5.2Interface類的用法
2.5.3示例:使用Interface類
2.6依賴於接口的設計模式
2.7小結
第3章封裝和信息隱藏
3.1信息隱藏原則
3.1.1封裝與信息隱藏
3.1.2接口扮演的角色
3.2創建對象的基本模式
3.2.1門戶大開型對象
3.2.2用命名規範區別私用成員
3.2.3作用域、嵌套函式和閉包
3.2.4用閉包實現私用成員
3.3更多高級對象創建模式
3.3.1靜態方法和屬性
3.3.2常量
3.3.3單體和對象工廠
3.4封裝之利
3.5封裝之弊
3.6小結
第4章繼承
4.1為什麼需要繼承
4.2類式繼承
4.2.1原型鏈
4.2.2extend函式
4.3原型式繼承
4.3.1對繼承而來的成員的讀和寫的不對等性
4.3.2clone函式
4.4類式繼承和原型式繼承的對比
4.5繼承與封裝
4.6摻元類
4.7示例:就地編輯
4.7.1類式繼承解決方案
4.7.2原型式繼承解決方案
4.7.3摻元類解決方案
4.8繼承的適用場合
4.9小結
第5章單體模式
5.1單體的基本結構
5.2劃分命名空間
5.3用作特定網頁專用代碼的包裝器的單體
5.4擁有私用成員的單體
5.4.1使用下劃線表示法
5.4.2使用閉包
5.4.3兩種技術的比較
5.5惰性實例化
5.6分支
5.7示例:用分支技術創建XHR對象
5.8單體模式的適用場合
5.9單體模式之利
5.10單體模式之弊
5.11小結
第6章方法的鏈式調用
6.1調用鏈的結構
6.2設計一個支持方法鏈式調用的JavaScript庫
6.3使用回調從支持鏈式調用的方法獲取數據
6.4小結
第二部分設計模式
第7章工廠模式
7.1簡單工廠
7.2工廠模式
7.3工廠模式的適用場合
7.3.1動態實現
7.3.2節省設定開銷
7.3.3用許多小型對象組成一個大對象
7.4示例:XHR工廠
7.4.1專用型連線對象
7.4.2在運行時選擇連線對象
7.5示例:RSS閱讀器
7.6工廠模式之利
7.7工廠模式之弊
7.8小結
第8章橋接模式
8.1示例:事件監聽器
8.2橋接模式的其他例子
8.3用橋接模式聯結多個類
8.4示例:構建XHR連線佇列
8.4.1添加核心工具
8.4.2添加觀察者系統
8.4.3開發佇列的基本框架
8.4.4實現佇列
8.4.5哪些地方用了橋接模式
8.5橋接模式的適用場合
8.6橋接模式之利
8.7橋接模式之弊
8.8小結
第9章組合模式
9.1組合對象的結構
9.2使用組合模式
9.3示例:表單驗證
9.3.1匯合起來
9.3.2向FormItem添加操作
9.3.3向層次體系中添加類
9.3.4添加更多操作
9.4示例:圖片庫
9.5組合模式之利
9.6組合模式之弊
9.7小結
第10章門面模式
10.1一些你可能已經知道的門面元素
10.2JavaScript庫的門面性質
10.3用作便利方法的門面元素
10.4示例:設定HTML元素的樣式
10.5示例:設計一個事件工具
10.6實現門面模式的一般步驟
10.7門面模式的適用場合
10.8門面模式之利
10.9門面模式之弊
10.10小結
第11章適配器模式
11.1適配器的特點
11.2適配原有實現
11.3示例:適配兩個庫
11.4示例:適配電子郵件API
11.4.1用適配器包裝Web郵件API
11.4.2從fooMail轉向dedMail
11.5適配器模式的適用場合
11.6適配器模式之利
11.7適配器模式之弊
11.8小結
第12章裝飾者模式
12.1裝飾者的結構
12.1.1接口在裝飾者模式中的角色
12.1.2裝飾者模式與組合模式的比較
12.2裝飾者修改其組件的方式
12.2.1在方法之後添加行為
12.2.2在方法之前添加行為
12.2.3替換方法
12.2.4添加新方法
12.3工廠的角色
12.4函式裝飾者
12.5裝飾者模式的適用場合
12.6示例:方法性能分析器
12.7裝飾者模式之利
12.8裝飾者模式之弊
12.9小結
第13章享元模式
13.1享元的結構
13.2示例:汽車登記
13.2.1內在狀態和外在狀態
13.2.2用工廠進行實例化
13.2.3封裝在管理器中的外在狀態
13.3管理外在狀態
13.4示例:Web日曆
13.4.1把日期對象轉化為享元
13.4.2外在數據保存在哪裡
13.5示例:工具提示對象
13.5.1未經最佳化的Tooltip類
13.5.2作為享元的Tooltip
13.6保存實例供以後重用
13.7享元模式的適用場合
13.8實現享元模式的一般步驟
13.9享元模式之利
13.10享元模式之弊
13.11小結
第14章代理模式
14.1代理的結構
14.1.1代理如何控制對本體的訪問
14.1.2虛擬代理、遠程代理和保護代理
14.1.3代理模式與裝飾者模式的比較
14.2代理模式的適用場合
14.3示例:網頁統計
14.4包裝Web服務的通用模式
14.5示例:目錄查找
14.6創建虛擬代理的通用模式
14.7代理模式之利
14.8代理模式之弊
14.9小結
第15章觀察者模式
15.1示例:報紙的投送
15.1.1推與拉的比較
15.1.2模式的實踐
15.2構建觀察者API
15.2.1投送方法
15.2.2訂閱方法
15.2.3退訂方法
15.3現實生活中的觀察者
15.4示例:動畫
15.5事件監聽器也是觀察者
15.6觀察者模式的適用場合
15.7觀察者模式之利
15.8觀察者模式之弊
15.9小結
第16章命令模式
16.1命令的結構
16.1.1用閉包創建命令對象
16.1.2客戶、調用者和接收者
16.1.3在命令模式中使用接口
16.2命令對象的類型
16.3示例:選單項
16.3.1選單組合對象
16.3.2命令類
16.3.3匯合起來
16.3.4添加更多選單項
16.4示例:取消操作和命令日誌
16.4.1使用命令日誌實現不可逆操作的取消
16.4.2用於崩潰恢復的命令日誌
16.5命令模式的適用場合
16.6命令模式之利
16.7命令模式之弊
16.8小結
第17章職責鏈模式
17.1職責鏈的結構
17.2傳遞請求
17.3在現有層次體系中實現職責鏈
17.4事件委託
17.5職責鏈模式的適用場合
17.6圖片庫的進一步討論
17.6.1用職責鏈提高組合對象的效率
17.6.2為圖片添加標籤
17.7職責鏈模式之利
17.8職責鏈模式之弊
17.9小結