loading

Logout succeed

Logout succeed. See you again!

ebook img

JavaScript高级程序设计 = Professional JavaScript for Web PDF

pages750 Pages
release year2012
file size23.009 MB
languageChinese

Preview JavaScript高级程序设计 = Professional JavaScript for Web

图灵社区会员 StinkBC([email protected]) 专享 尊重版权 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 内 容 提 要 本书是JavaScript超级畅销书的最新版。ECMAScript 5和HTML5在标准之争中双双胜出,使大量 专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性。本书这 一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从 JavaScript语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深入浅出地探讨了面向 对象编程、Ajax与Comet服务器端通信,HTML5表单、媒体、Canvas(包括WebGL)及Web Workers、 地理定位、跨文档传递消息、客户端存储(包括IndexedDB)等新API,还介绍了离线应用和与维护、性 能、部署相关的最佳开发实践。本书附录展望了未来的API和ECMAScript Harmony规范。 本书适合有一定编程经验的Web应用开发人员阅读,也可作为高校及社会实用技术培训相关专业课 程的教材。 图灵程序设计丛书 JavaScript高级程序设计(第3版) ◆ 著    [美] Nicholas C. Zakas 译    李松峰 曹 力 责任编辑 朱 巍 ◆ 人民邮电出版社出版发行  北京市崇文区夕照寺街14号 邮编 100061  电子邮件 [email protected] 网址 http://www.ptpress.com.cn 北京      印刷 ◆ 开本:800×1000 1/16 印张:46.75 彩插:8 字数:1092千字 2012年 3 月第 1 版 印数:1 — 6 000册 2012年 3 月北京第 1 次印刷 著作权合同登记号 图字:01-2012-1175 号 ISBN 978-7-115-27579-0 定价:99.00元 读者服务热线:(010)51095186转604 印装质量热线:(010)67129223 反盗版热线:(010)67171154 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 错误!文档中没有指定样式的文字。 1 1 版 权 声 明 2 3 Original edition, entitled Professional JavaScript for Web Developers 3rd Edition, by Nicholas C. Zakas, ISBN 978-1-118-02669-4, published by John Wiley & Sons, Inc. Copyright ©2012 by John Wiley & Sons, Inc.,All rights reserved.This translation published under License. 4 Translation edition published by POSTS & TELECOM PRESS Copyright ©2012. Copies of this book sold without a Wiley sticker on the cover are unauthorized and illegal. 5 本书简体中文版由John Wiley & Sons, Inc.授权人民邮电出版社独家出版。 本书封底贴有John Wiley & Sons, Inc.激光防伪标签,无标签者不得销售。 版权所有,侵权必究。 6 7 8 9 10 11 12 13 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 4 第5章 IDA数据显示窗口 序 20多年的职业生涯,我也长出了白头发。回首往事,曾经对我的职业道路产生过重要影响的技术和 人历历在目。如果让我只说一种技术,一种对我产生了最大正面影响的技术,那么就是 JavaScript。说 实话,我也并非一直都是 JavaScript的信徒。跟许多人一样,我以前也把它当作一门玩具语言,认为它 只能用来做一些旋转的横幅广告,或者在页面中添加一些有意思的交互效果作为装饰。我原来是做服务 器端开发的,我们都对这种玩具语言不感冒,该死的!可是,后来Ajax出现了。 永远也忘不了当时无孔不入的Ajax,大家都认为它是一种非常酷、非常新,同时极具创造性的技术。 我也开始了解它,阅读相关资料。知道这门曾被我嗤之以鼻的玩具语言如今被每一位专业 Web 开发人 员津津乐道之后,我感到很震惊。突然,我的看法就转变了。随着探索 Ajax 的继续深入,我认识到 JavaScript的强大威力,急切地想了解它能提供的所有“法宝”。于是,我全身心地投入到学习JavaScript 之中,不仅努力学习这门语言,还加入了jQuery项目团队,专门从事客户端开发。我的日子过得很爽。 对 JavaScript了解得越深,接触的开发人员就越多,其中不乏今天在我眼里依然是巨星和导师级的 人物。尼古拉斯·泽卡斯(本书作者)就是这样一位开发人员。我一直记得在读本书第2版时心中油然 而生的喜悦之情,虽然我也有多年的积累,但仍然从中学到了很多新东西。这本书实实在在、深入浅出, 读来就好像尼古拉斯对不同层次的读者都了如指掌,所以他的风格才那么贴切自然。对于技术书来说, 这是非常突出的一个特色。多数作者都想靠坚深的技术给人留下印象,但这本书不同。所以,它很快就 成为了我案头必备的书,我也会向那些有志全面掌握 JavaScript的开发人员推荐这本书。我希望每个人 对这本书都能有跟我一样的体会,认识到它的价值所在。 后来,在一次jQuery大会上,我荣幸地见到了尼古拉斯本人。站在我面前的是一位世界顶级的JavaScript 开发人员,而且正负责世界上最重要的一个Web站点(雅虎)。尼古拉斯是我见过的最随和的人之一。真 的,见到他的时候我有一种追星族的幻觉。但他就是那么一个活生生的人,一个想帮助开发人员成就梦想 的人。不仅他的书改变了我对JavaScript的认识,而且尼古拉斯这个人,也让我愿意接近,愿意了解。 听说尼古拉斯要请我作序,我激动得不知道说什么才好。在此,我代表大牛来为本书暖场。这个序 也是他本人有多么令人景仰的一个明证。不过,更重要的是,这也给了我一个机会,让我能跟大家分享 自己为什么觉得这本书如此重要。我看过很多 JavaScript图书,的确也有很多令人叹服的佳作。但在我 看来,这本书为读者成为全方位的JavaScript高手提供了“一揽子方案”。 这本书从介绍表达式和变量声明开始,平滑地过渡到了闭包、面向对象开发等高级主题。与那些把 大量篇幅花在讲解背景知识上的书,以及那些让人感觉好像是要使用 JavaScript开发导弹制导系统的书 相比,这本书让人感觉细致周到、亲切自然。这是一本写给“普通人”的书,它能让你编写出引以为荣 的代码,构建出令人叫绝的网站。 雷·邦戈(Rey Bango) 微软公司高级布道师,jQuery项目团队核心成员 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 前 言 1 1 献给我的父母,是他们永远给我支持和鼓励。 2 前 言 3 从驱动全球商业、贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript已经成为当 今世界上最流行的编程语言一点儿都不为过。 4 JavaScript是一种非常松散的面向对象语言,也是Web开发中极受欢迎的一门语言。JavaScript,尽 管它的语法和编程风格与Java都很相似,但它却不是Java的“轻量级”版本,甚至与Java没有任何关 系。JavaScript是一种全新的动态语言,它植根于全球数亿网民都在使用的 Web浏览器之中,致力于增 5 强网站和Web应用程序的交互性。 在本书中,我们将对JavaScript追根溯源,从它在最早的Netscape浏览器中诞生谈起,一直谈到今 天的它对DOM和Ajax的强大支持。读者将通过本书掌握如何运用和扩展这门语言,从而更好地满足自 己的需求,以及如何实现客户端与服务器的无缝通信,而又不必求助于 Java或隐藏的网页框架(frame 6 元素)。一言以蔽之,本书将教会你在面对各种常见的 Web开发问题时,如何拿出自己的 JavaScript解 决方案。 7 本书读者对象 本书将下列三类人员作为目标读者: 8 (1) 熟悉面向对象编程、经验丰富而又打算学习JavaScript的开发人员,JavaScript毕竟与Java、C++ 等传统OO语言存在着诸多联系; (2) 有意提升自己网站和Web应用程序易用性的Web开发人员; 9 (3) 希望全面深入地理解这门语言的初级JavaScript开发人员。 此外,本书也适合熟悉下列相关技术的读者阅读: (1) Java 10 (2) PHP (3) ASP.NET (4) HTML (5) CSS 11 (6) XML 本书不适合没有计算机基础知识的初学者,也不适合只想为网站添加简单交互功能的读者。建议这 些朋友学习阅读Beginning JavaScript, 3rd Edition(Wiley, 2007)一书①。 12 —————————— ① 本书中文版《JavaScript入门经典(第 3版)》已经由清华大学出版社出版。——译者注(以下脚注如无特殊说明, 13 均为译者注) 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 2 前 言 本书内容 本书提供了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 Wide Web Consortium,万维网联 盟)制定的一些相关标准。 第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、 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 前 言 3 location、navigator和screen。 1 第9章“客户端检测”,讨论了检测客户端机器及其支持特性的各种手段,包括特性检测及用户代 理字符串检测的不同技术。这一章还就每种手段的优缺点及适用情形给出了详细说明。 第10章“DOM”,介绍DOM(Document Object Model,文档对象模型),即DOM1规定的JavaScript 2 中的DOM对象。这一章也简要介绍了XML及其与DOM的关系,为深入探讨所有DOM规范及其定义 的操作网页的方式奠定了基础。 第11章“DOM扩展”,介绍了其他API以及浏览器本身为DOM添加的各种功能。涉及内容包括 3 Selectors API、Element Traversal API和HTML5扩展。 第 12章“DOM2和DOM3”,在前两章的基础上继续探讨了DOM2和DOM3中新增的DOM属 性、方法和对象。这一章还讨论了IE与其他浏览器的兼容性问题。 4 第13章“事件”,解释了JavaScript中事件的本质,对遗留机制的支持,以及DOM对事件机制的 重新定义。这一章讨论了多种设备,包括Wii和iPhone。 第 14 章“表单脚本”,讲述如何使用 JavaScript增强表单的交互性,突破浏览器的局限性。这一 5 章的讨论主要围绕单个表单元素如文本框、选择框,以及围绕数据验证和操作展开。 第15章“使用Canvas绘图”,讨论了<canvas>标签以及如何通过它来动态绘图。不仅涵盖2D 上下文,也将讨论WebGL(3D)上下文,可以为创建动画和游戏夯实基础。 第 16章“HTML5脚本编程”,介绍了HTML5规定的JavaScript API,涉及跨文档传递消息、拖 6 放API和以编程方式控制<audio>和<video>元素,以及管理历史状态。 第 17章“错误处理与调试”,讨论浏览器如何处理 JavaScript代码错误,并展示了一些处理错误 的方式。这一章针对每种浏览器分别讨论了相应的调试工具和技术,还给出了简化调试工作的建议。 7 第 18 章“JavaScript 与 XML”,展示了 JavaScript中用于读取和操作 XML(eXtensible Markup Language,可扩展标记语言)的特性。这一章分析了不同浏览器提供的 XML支持和对象的差异,给出 了编写跨浏览器代码的简易方法。此外,这一章还介绍了用于在客户端转换XML数据的XSLT(eXtensible 8 Stylesheet Language Transformations,可扩展样式表语言转换)技术。 第19章“E4X”,讨论了E4X(ECMAScript for XML,ECMAScript中的XML扩展);设计E4X的 出发点是简化 XML 处理任务。这一章探讨了在处理 XML 时,使用 E4X 与使用 DOM 相比有哪些 9 优势。 第 20章“JSON”,介绍了作为 XML替代格式的 JSON,包含浏览器原生支持的 JSON解析和序 列化,以及使用JSON时要注意的安全问题。 10 第21章“Ajax与Comet”,讲解了常用的Ajax技术,包括使用XMLHttpRequest对象及CORS (Cross-Origin Resource Sharing,跨来源资源共享)API实现跨域 Ajax通信。这一章展示了浏览器在实 现与支持方面存在的差异,同时也给出了一些使用建议。 11 第22章“高级技巧”,深入讲解了一些JavaScript中较复杂的模式,包括函数柯里化(currying)、 部分函数应用和动态函数。这一章还讨论了如何创建自定义的事件框架和使用 ECMAScript 5创建防篡 改对象。 12 第23章“离线应用与客户端存储”,讨论了如何检测应用离线以及在客户端机器中存储数据的各 种技术。先从受到最广泛支持的特性 cookie谈起,继而介绍了新兴的客户端存储技术,如 Web Storage 和IndexedDB。 13 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 4 前 言 第 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 中下载。登录该站点后,先找到本书(通过搜索或者图书列表),打开本书页 —————————— ① 读者也可以在图灵社区(http://www.ituring.com.cn/)本书的页面中免费注册下载。 图灵社区会员 StinkBC([email protected]) 专享 尊重版权 前 言 5 面后,单击其中的 Download Code链接,就可以下载本书的源代码了①。对于包含在下载文件中的源代 1 码,书中会添加以下图标: 2 本书代码示例旁边会附有文件名,从中可以找到对应的代码片段。文件名的格式如下: 代码片段所在的文件名 3 由于很多书的书名看起来类似,所以更好的方式是通过书的ISBN来搜索它。本 4 书原版的ISBN是978-1-118-02669-4。 下载完代码后,请使用解压缩软件将其解压缩。此外,读者也可以登录 Wrox 代码下载主页 www.wrox.com/dynamic/books/download.aspx,查找并下载本书及其他Wrox图书的示例代码。 5 勘误信息② 6 我们尽最大努力确保正文和代码没有错误。可是,金无足赤,错误在所难免。如果读者发现我们书 中的任何错误,例如错别字或代码片段无法运行等,希望您能及时给我们反馈。您提交的勘误不仅能让 其他读者受益,而且也能帮助我们进一步提高图书质量。 7 本书原版的勘误页面位于 www.wrox.com 中,登录该站点后可以通过搜索或查询图书列表找到本 书页面,然后单击页面中的Errata(勘误)链接。然后可以看到其他读者已经提交并由Wrox的编辑发 布的勘误信息。另外,在 www.wrox.com/misc-pages/booklist.shtml 页面中也可以找到本书及勘误页面 8 的链接。 如果读者在本书勘误页面中没有发现“你的”错误,麻烦打开www.wrox.com/contact/techsupport.shtml 页面,填写其中的表单并将错误发送给我们。我们会认真核对您提交的错误,如果错误确实存在,我们 9 将把它补充到本书勘误页面中。同时,也将根据您提供的信息对本书后续版本加以改正。 p2p.wrox.com 10 如果您想与本书作者或者其他读者沟通,请加入 P2P论坛(p2p.wrox.com)。该论坛是基于 Web的 系统,您可以在其中发表与 Wrox图书及相关技术有关的帖子,并同其他读者或者技术用户交流。论坛 提供了一个订阅功能,您可以选择当发表您感兴趣的帖子时通过邮件通知您。Wrox 的作者、编辑、其 11 他行业的专家以及与您正在读同一本书的读者都会出现在这个论坛中。 在http://p2p.wrox.com中,有很多论坛不仅对您理解本书有帮助,而且还会对开发应用程序有帮助。 要加入这个论坛,请按下面几个步骤进行: 12 (1) 登录到p2p.wrox.com,单击Register(注册)链接; —————————— ① 翻译本书时,wrox.com中下载本书代码的短地址为:http://tinyurl.com/projs-3rd-code。 13 ② 您也可以登录图灵社区(http://www.ituring.com.cn/),在本书页面中提交您发现的错误。 图灵社区会员 StinkBC([email protected]) 专享 尊重版权

See more

The list of books you might like