- JavaScript高級程序設計(第3版)
- (美)Nicholas C.Zakas
- 4820字
- 2020-06-23 12:52:26
前言
獻給我的父母,是他們永遠給我支持和鼓勵。
從驅動全球商業、貿易及管理領域不計其數的復雜應用程序的角度來看,說JavaScript已經成為當今世界上最流行的編程語言一點兒都不為過。
JavaScript是一種非常松散的面向對象語言,也是Web開發中極受歡迎的一門語言。JavaScript,盡管它的語法和編程風格與Java都很相似,但它卻不是Java的“輕量級”版本,甚至與Java沒有任何關系。JavaScript是一種全新的動態語言,它植根于全球數億網民都在使用的Web瀏覽器之中,致力于增強網站和Web應用程序的交互性。
在本書中,我們將對JavaScript追根溯源,從它在最早的Netscape瀏覽器中誕生談起,一直談到今天的它對DOM和Ajax的強大支持。讀者將通過本書掌握如何運用和擴展這門語言,從而更好地滿足自己的需求,以及如何實現客戶端與服務器的無縫通信,而又不必求助于Java或隱藏的網頁框架(frame元素)。一言以蔽之,本書將教會你在面對各種常見的Web開發問題時,如何拿出自己的JavaScript解決方案。
本書讀者對象
本書將下列三類人員作為目標讀者:
(1) 熟悉面向對象編程、經驗豐富而又打算學習JavaScript的開發人員,JavaScript畢竟與Java、C++等傳統OO語言存在著諸多聯系;
(2) 有意提升自己網站和Web應用程序易用性的Web開發人員;
(3) 希望全面深入地理解這門語言的初級JavaScript開發人員。
此外,本書也適合熟悉下列相關技術的讀者閱讀:
(1) Java
(2) PHP
(3) ASP.NET
(4) HTML
(5) CSS
(6) XML
本書不適合沒有計算機基礎知識的初學者,也不適合只想為網站添加簡單交互功能的讀者。建議這些朋友學習閱讀Beginning JavaScript,3rd Edition(Wiley,2007)一書。
本書內容
本書提供了JavaScript開發人員必須掌握的內容,全面涵蓋了JavaScript的各種高級、有用的特性。
本書首先介紹了JavaScript的起源及其發展現狀,隨后討論了構成JavaScript實現的各個組成部分,重點講解了ECMAScript和DOM標準。此外,還對不同Web瀏覽器的JavaScript實現之間存在的差異,給出了相應的說明。
在此基礎上,本書從講解JavaScript的基本概念入手,探討了JavaScript面向對象程序設計和繼承的方式,以及如何在HTML等標記語言中使用它。在深入剖析了事件和事件處理之后,又解釋了各種瀏覽器檢測技術。本書還探討了HTML5、Selectors API和File API等一系列新API。
本書最后一部分專門討論了高級主題,涉及性能和內存優化、最佳實踐以及對JavaScript未來的展望。
本書結構
本書共25章,各章簡介如下。
第1章“JavaScript簡介”,講述了JavaScript的起源:因何而生,如何發展,現狀如何。涉及的概念主要有JavaScript與ECMAScript之間的關系、DOM(Document Object Model,文檔對象模型)、BOM(Browser Object Model,瀏覽器對象模型)。此外,還將討論ECMA(European Computer Manufacturer's Association,歐洲計算機制造商協會)和W3C(World WideWebConsortium,萬維網聯盟)制定的一些相關標準。
第2章“在HTML中使用JavaScript”,介紹了如何在HTML中使用JavaScript創建動態網頁。這一章不僅展示了在網頁中嵌入JavaScript的各種方式,還討論了JavaScript內容類型(content-type)及其與<script>元素的關系。
第3章“基本概念”,討論了JavaScript語言的基本概念,包括語法和流控制語句。這一章也分析了JavaScript與其他基于C的語言在語法上的相同和不同之處,還介紹了與內置操作符有關的類型轉換問題。
第4章“變量、作用域和內存問題”,探討了JavaScript如何處理其松散類型的變量。這一章還討論了原始值和引用值之間的差別,以及與變量有關的執行環境的相應內容。最后,通過介紹JavaScript的垃圾收集機制,解釋了變量在退出作用域時釋放其內存的問題。
第5章“引用類型”,詳盡介紹了JavaScript內置的所有引用類型,如Object和Array。這一章對ECMA-262規范中描述的每一種引用類型既做了理論上的闡釋,又從瀏覽器實現的角度給出了介紹。
第6章“面向對象的程序設計”,講述了在JavaScript中如何實現面向對象的程序設計。由于JavaScript沒有類的概念,因此這一章從對象創建和繼承的層面上展示了一些流行的技術。此外,這一章還講解了函數原型的概念,并對函數原型與整個面向對象方法的關系進行了探討。
第7章“函數表達式”,集中介紹了JavaScript中最為強大的一個特性——函數表達式。相關的內容涉及閉包、this對象的角色、模塊模式和創建私有對象成員等。
第8章“BOM”,介紹BOM(Browser Object Model,瀏覽器對象模型),即負責處理與瀏覽器自身有關的交互操作的對象集合。這一章全面介紹了每一個BOM對象,包括window、document、location、navigator和screen。
第9章“客戶端檢測”,討論了檢測客戶端機器及其支持特性的各種手段,包括特性檢測及用戶代理字符串檢測的不同技術。這一章還就每種手段的優缺點及適用情形給出了詳細說明。
第10章“DOM”,介紹DOM(Document Object Model,文檔對象模型),即DOM1規定的JavaScript中的DOM對象。這一章也簡要介紹了XML及其與DOM的關系,為深入探討所有DOM規范及其定義的操作網頁的方式奠定了基礎。
第11章“DOM擴展”,介紹了其他API以及瀏覽器本身為DOM添加的各種功能。涉及內容包括Selectors API、Element Traversal API和HTML5擴展。
第12章“DOM2和DOM3”,在前兩章的基礎上繼續探討了DOM2和DOM3中新增的DOM屬性、方法和對象。這一章還討論了IE與其他瀏覽器的兼容性問題。
第13章“事件”,解釋了JavaScript中事件的本質,對遺留機制的支持,以及DOM對事件機制的重新定義。這一章討論了多種設備,包括Wii和iPhone。
第14章“表單腳本”,講述如何使用JavaScript增強表單的交互性,突破瀏覽器的局限性。這一章的討論主要圍繞單個表單元素如文本框、選擇框,以及圍繞數據驗證和操作展開。
第15章“使用Canvas繪圖”,討論了<canvas>標簽以及如何通過它來動態繪圖。不僅涵蓋2D上下文,也將討論WebGL(3D)上下文,可以為創建動畫和游戲夯實基礎。
第16章“HTML5腳本編程”,介紹了HTML5規定的JavaScript API,涉及跨文檔傳遞消息、拖放API和以編程方式控制<audio>和<video>元素,以及管理歷史狀態。
第17章“錯誤處理與調試”,討論瀏覽器如何處理JavaScript代碼錯誤,并展示了一些處理錯誤的方式。這一章針對每種瀏覽器分別討論了相應的調試工具和技術,還給出了簡化調試工作的建議。
第18章“JavaScript與XML”,展示了JavaScript中用于讀取和操作XML(eXtensible Markup Language,可擴展標記語言)的特性。這一章分析了不同瀏覽器提供的XML支持和對象的差異,給出了編寫跨瀏覽器代碼的簡易方法。此外,這一章還介紹了用于在客戶端轉換XML數據的XSLT(eXtensible Stylesheet Language Transformations,可擴展樣式表語言轉換)技術。
第19章“E4X”,討論了E4X(ECMAScript for XML,ECMAScript中的XML擴展);設計E4X的出發點是簡化XML處理任務。這一章探討了在處理XML時,使用E4X與使用DOM相比有哪些優勢。
第20章“JSON”,介紹了作為XML替代格式的JSON,包含瀏覽器原生支持的JSON解析和序列化,以及使用JSON時要注意的安全問題。
第21章“Ajax與Comet”,講解了常用的Ajax技術,包括使用XMLHttpRequest對象及CORS(Cross-Origin Resource Sharing,跨來源資源共享)API實現跨域Ajax通信。這一章展示了瀏覽器在實現與支持方面存在的差異,同時也給出了一些使用建議。
第22章“高級技巧”,深入講解了一些JavaScript中較復雜的模式,包括函數柯里化(currying)、部分函數應用和動態函數。這一章還討論了如何創建自定義的事件框架和使用ECMAScript 5創建防篡改對象。
第23章“離線應用與客戶端存儲”,討論了如何檢測應用離線以及在客戶端機器中存儲數據的各種技術。先從受到最廣泛支持的特性cookie談起,繼而介紹了新興的客戶端存儲技術,如Web Storage和IndexedDB。
第24章“最佳實踐”,探討了在企業級環境中使用JavaScript的各種方式。其中,著眼于提高可維護性的內容包括編碼技巧、格式化和通用編程實踐。這一章還介紹了改善代碼執行性能及速度優化的一些技術。最后討論了部署問題,包括如何創建構建過程。
第25章“新興的API”,介紹了為增強瀏覽器中的JavaScript而創建的新API。雖然這些API還沒有得到完整或全面的支持,但它們已經嶄露頭角,有些瀏覽器也已經部分地實現了這些API。這一章的內容主要是Web計時和文件API。
使用示例
要運行本書中的示例,需要安裝下列軟件:
? Windows XP、Windows 7或Mac OS X;
? Internet Explorer 6及更高版本、Firefox 2及更高版本、Opera 9及更高的版本、Chrome、Safari 2及更高版本。
完整的示例源代碼可以從http://www.wrox.com/中下載(下載步驟見“源代碼”一節)。
排版約定
為了讓讀者更好地理解本書內容,同時把握住全書的重點,本書將采用以下排版約定。
這種帶警告圖標的方框樣式,表示與上下文相關的重要的、需要牢記的內容。
這種帶鋼筆圖標的方框樣式,表示與上下文相關的說明、提示、技巧、竅門和背景知識。
正文中的樣式說明如下。
(1) 新術語及重要的詞匯在首次出現時使用加粗字體以示強調;
(2) 表示鍵盤命令組合的方式是Ctrl+A;
(3) 正文中的代碼使用等寬字體,如persistence.properties;
(4) 代碼有兩種樣式:
var obj=new Object(); // 大多數示例代碼都沒有加粗 var obj=new Object(); // 加粗的代碼表示在上下文中特別重要
源代碼
在學習本書示例代碼時,可以手工敲入所有代碼,也可以使用隨書的源代碼文件。本書所有源代碼都可以到www.wrox.com中下載。登錄該站點后,先找到本書(通過搜索或者圖書列表),打開本書頁面后,單擊其中的Download Code鏈接,就可以下載本書的源代碼了。對于包含在下載文件中的源代碼,書中會添加以下圖標:

本書代碼示例旁邊會附有文件名,從中可以找到對應的代碼片段。文件名的格式如下:

由于很多書的書名看起來類似,所以更好的方式是通過書的ISBN來搜索它。本書原版的ISBN是978-1-118-02669-4。
下載完代碼后,請使用解壓縮軟件將其解壓縮。此外,讀者也可以登錄Wrox代碼下載主頁www.wrox.com/dynamic/books/download.aspx,查找并下載本書及其他Wrox圖書的示例代碼。
勘誤信息
我們盡最大努力確保正文和代碼沒有錯誤。可是,金無足赤,錯誤在所難免。如果讀者發現我們書中的任何錯誤,例如錯別字或代碼片段無法運行等,希望您能及時給我們反饋。您提交的勘誤不僅能讓其他讀者受益,而且也能幫助我們進一步提高圖書質量。
本書原版的勘誤頁面位于www.wrox.com中,登錄該站點后可以通過搜索或查詢圖書列表找到本書頁面,然后單擊頁面中的Errata(勘誤)鏈接。然后可以看到其他讀者已經提交并由Wrox的編輯發布的勘誤信息。另外,在www.wrox.com/misc-pages/booklist.shtml頁面中也可以找到本書及勘誤頁面的鏈接。
如果讀者在本書勘誤頁面中沒有發現“你的”錯誤,麻煩打開www.wrox.com/contact/techsupport.shtml頁面,填寫其中的表單并將錯誤發送給我們。我們會認真核對您提交的錯誤,如果錯誤確實存在,我們將把它補充到本書勘誤頁面中。同時,也將根據您提供的信息對本書后續版本加以改正。
如果您想與本書作者或者其他讀者溝通,請加入P2P論壇(p2p.wrox.com)。該論壇是基于Web的系統,您可以在其中發表與Wrox圖書及相關技術有關的帖子,并同其他讀者或者技術用戶交流。論壇提供了一個訂閱功能,您可以選擇當發表您感興趣的帖子時通過郵件通知您。Wrox的作者、編輯、其他行業的專家以及與您正在讀同一本書的讀者都會出現在這個論壇中。
在http://p2p.wrox.com中,有很多論壇不僅對您理解本書有幫助,而且還會對開發應用程序有幫助。要加入這個論壇,請按下面幾個步驟進行:
(1) 登錄到p2p.wrox.com,單擊Register(注冊)鏈接;
(2) 閱讀使用條款并單擊Agree(同意);
(3) 完成必填信息和您愿意提供的可選信息,然后單擊Submit(提交);
(4) 隨后,您會收到一封電子郵件,其中包含如何驗證賬號和完成注冊過程的信息。
如果不加入P2P論壇,雖然也可以閱讀其中的帖子,但卻不能發表帖子,只有注冊后才能發表。
在加入論壇后,既可以發表新帖子也可以回復其他用戶的帖子。可以在任何時間上網瀏覽論壇中的帖子。如果希望將某個論壇中的新帖子通過電子郵件發送給您,請在論壇列表中單擊與論壇名相關的Subscribe to this Forum(訂閱這個論壇)圖標。
如果想了解有關如何使用Wrox P2P的更多信息,請閱讀包含論壇規則、P2P及Wrox圖書常見問題的P2P FAQ;要閱讀FAQ,可以在任何P2P頁面中單擊FAQ鏈接。
致謝
雖然作者的名字被印在了封面上,但一個人是不可能完成這本書的,我想感謝與出版本書有關的一些人。
首先,感謝John Wiley & Sons繼續給我寫作的機會。當時,出版本書第1版時,他們是唯一愿意承擔風險的一家出版社。對此,我將永遠銘記于心。
感謝John Wiley & Sons的編輯人員,特別是Kevin Kent和John Peloquin,他們卓有成效的工作使我保持了坦誠直率的風格,也解決了我在寫作期間不斷變更內容的問題。
還要感謝對本書草稿給出反饋意見的所有人:Rob Friesel、Sergey Ilinsky、Dan Kielp、Peter-Paul Koch、Jeremy McPeak、Alex Petrescu、Dmitry Soshnikov和Juriy “Kangax”Zaytsev。你們的寶貴意見讓我自己都為本書感到驕傲。
我想特別感謝Brendan Eich,感謝他糾正了第1章中有關JavaScript歷史的細節問題。
最后,當然也是非常重要的,感謝Rey Bango為本書作序。很高興在與Rey通過網絡認識幾年之后,終于在2010年有緣相見。他是這個行業里真正出色的人,我非常榮幸能請到他為本書作序。
關于技術編輯
John Peloquin是一位有十多年JavaScript經驗的前端工程師,開發過各種規模的應用。John擁有加州大學伯克利分校的數學學士學位,目前在一家致力于衛生保健的創業公司擔任開發主管。在編輯本書之前,John編輯過Jeremy McPeak的JavaScript 24-Hour Trainer(Wiley,2010)。編寫代碼和收集勘誤之余,John經常沉迷于數學、哲學和魔術。
- Internet of Things with the Arduino Yún
- Unity Shader入門精要
- Mastering Google App Engine
- Hands-On Reinforcement Learning with Python
- .NET 3.5編程
- Android移動開發案例教程:基于Android Studio開發環境
- Qt5 C++ GUI Programming Cookbook
- 計算機應用基礎項目化教程
- Learning Ionic
- Android Development Tools for Eclipse
- Learning VMware vSphere
- Functional Python Programming
- 從“1”開始3D編程
- JBoss AS 7 Development
- Java程序設計