
本书用幽默风趣的语言带领读者进入JavaScript的世界,让读者在愉快的阅读中感受JavaScript的精妙,从中获益良多。
本书的作者朱印宏是位有着丰富的IT图书写作经验的作者,并且做事情有很强的责任心,其多本书都获得了读者的好评。我相信这本书应该会是一本JavaScript书的优秀作品。
不得不说这是本很有特色的书,作者通过自然的陈述娓娓道来JavaScript灵活多变的特点,一如书名所言,你将感觉自己亲身和作者一同踏上探寻真理的“征途”。“JavaScript 的优势在于灵活,而不是庞杂”,作者一语道破天机,开篇即指明了“征途”的方向。更难能可贵的是,作者抛弃教条式的指点,透过形象贴切的比喻和小故事,循序渐进地向你展示求知之旅中的种种风景,让你在旅途中不寂寞。
拿到《JavaScript征途》的目录和样章,第一感觉就是——如果回到学JavaScript的时候,我一定会买这本书。我以为,评价一本书的好坏,最重要的标准是它内容的价值,而非它讲述的方式。讲述知识能够做到深入浅出,绝不仅仅是因为语言风格和表达方式,一本书读起来舒服(尤其是技术书籍),一定是因为作者在以非常清晰的思维把书中讲到的东西和读者的知识背景连结起来。这本《JavaScript征途》,正是一本深入浅出,让人读起来感到舒服的书。
纵观整本书的目录可以发现,这本书涉及的知识层面还是比较广的。
撇去JavaScript的发展史不谈,光从技术方面来讲,从最基础的Hello World讲起,直到后面OOP的高级应用,中间穿插着相关的知识点,虽然没有一线贯穿,但是对于书后回头参考起了不小的作用,虽不完美,但也算是面面俱到。
作为JavaScript的初学者,这本书或许会对您有用,书中大致把常用的方法,函数及相关的知识点基本都讲到了,对于进阶的内容也可以从书中窥见一些。
对于有一定JavaScript基础的读者来说,这本书或许也有用处,当然,前提是您想涉及OOP领域,可以从书中讲到的一些OOP的处理方法中得到一些启发。
当然,如果想把这本书当作参考书,个人感觉就有点吃力了。虽然涉及的面比较广,但一些知识点,特别是一些标准的方法,例如DOM操作的讲解还是会有一些遗漏,毕竟DOM涉及到的知识点很多。但作为一本用来学习JavaScript的书来说,还是不错的选择。
从我到目前为止看的一些JavaScript的书来比较,书中对知识点的涉及有这么广的还没见过,当然不排除阅读量不够的可能。
老师最大的能力是激发学生学习的兴趣,继而系统全面的传授专业知识,《javascript征途》这本书以通俗易懂的文字和系统的编程思想循序渐进的向读者传授javascript语言精髓,这本书应该对所有想学习javascript语言的人来说是难得的一位良师益友。
JavaScript和它的应用环境都是在不断地发展变化着的,而且好像就快要有更大的变革要发生了(我已经闻到了甜丝丝的、血腥的气味)……在这些变化之中有些稳定的东西是不变的,教材当中必须讲明白的就是这些东西。
这本书从它的结构来看,可以让你以比较低的代价学会东西,这一点是很重要的。和国外图书的中文译本相比,原创的中文书在语言上更符合中国人说话的习惯,对于英文水平的一般的读者、尤其是入门读者来说,选这样的一本书学起来可能更容易些。这本书在深度和广度上都能够胜任其教材的作用,尤其在基础部分突出了一些重点,我个人以为主要缺点只是字数稍多了一些,然而,每个人看书的风格倾向不同,如果你正在为自己挑选一本教材,不妨试读一下本书,说不定它就是最适合你的。有人可能会抱怨这里没有把最新、最流行的应用、hack技巧和框架、函数集都囊括进来,但我想说,这本书已经够厚的了!如果你真想了解那些日新月异的东西,不如到论坛上来。书本是不能给你news的。
对于大多数人来说,学习JavaScript除了翻书以外,更重要的是实践。本书中出现的代码与“来自外面的世界的野生的代码”多少会有些不同,它们更容易被读者看懂,先把它们改动一番、折腾几下,你必能有所悟益,尤其可以加深对一些关键知识点的实质性的理解。之后你就可以到互联网的荒野上去放手一搏了,去解构Gmail吧,看看是不是还有跨站脚本(XSS)漏洞存在着?:D
JavaScript是一门比较灵活的语言,入门比较快,但是要想爬高需要一定的毅力,正所谓高处不胜寒吧。学习JavaScript需要一本 好书,这个很关键,我也读过或购买过很多JavaScript专业图书,今天看到样吧的 这本《JavaScript征途》,感觉还是不错,先看它的目录,非常系统,知识点基本上都包揽了,结构比较科学。
《JavaScript权威指南》比较经典,但是感觉它的梯度太大了,一般读者阅读起来可能会比较吃力,作为参考书,适合有一定基础 的开发人员案头查阅或参考,阅读性不是很强。《JavaScript高级程序设计》也是一本很有分量的书,不过它侧重于DOM编程,对于 函数式编程讲解不是很深入,所以,比较起来,我更看好《JavaScript征途》这本书,系统、全面、深入,是初学者难得的一本好 书。
另外,我在阅读《JavaScript征途》的样章时,感觉非常轻松,语言的宽度比较大,每句话都包含很多外延性的东西,犹如小米酒 一样,抿抿嘴,感觉有点意思,语言很风趣,读起来不是那么累心,语句中包含很多情感和思想性的内容,这个对于广大初学者来 说,是难得的营养滋补,正所谓随风潜入夜、润物细无声,功夫在外,功力于心。我看了一下作者是2008年度最佳原创图书奖得主 ,也难怪语言有如此魄力和魅力,内容气势恢宏,大家手笔,不同凡响,哈哈哈。
看了样章,感觉非常不错。现在市面上有很多优秀的js书籍,但是不得不说,这本书同样非常优秀并且有其独到之处。独到在何处呢?其一,言语生动,本来枯燥的学习在作者笔下变成了一件乐事。作者的怀中犹如藏了一只多拉A梦,十八般法宝通过生动的言辞一件件呈现在我们的面前。有谁会看着多拉A梦眼皮打瞌睡呢?其二,原理透彻,我们学任何一样东西,当知其然后,往往会忽略其所以然,但是这本书,你想忽略都不成,作者花了很大的功夫把所以然讲的非常透彻,所以这本书不光适合初学者,同样适用于具有一定js基础又希望有所提高的朋友。
作为前端开发中的一员,所具备的基本三把必要装备是Xhtml、CSS、Javascript。大多数JS书籍中测试的浏览器一般是网景和IE,我不明白的是现在的网景浏览器已经不存在了,书中JS脚本确是针对这个,与我们的工作差之较远。本书中所针对的是现在所流行的浏览器IE5.5或更高版本、Mozilla 1.0或更高版本、Opera 7.5或更高版本、Safari 1.2或更高版本,绝对是你现实生活中所应用到的,解决你工作中所遇到的浏览器兼容问题。
相信初学者都不会喜欢词汇之类的名词解释,如果我想学习什么是闭包的话,我从网上可以搜到很多名词解释,顺便跟着一些高深的例子,天呢,我是初学者,我不需要了解那么多东西,我只想知道他的作用,一句话解释清楚行吗?让我知道它是干啥的就行,不要弄高深,偶是小虾米,不想吃螃蟹;本书的语言不是冷冰冰的技术语言,而是通过一些实例来解释你所不了解的知识点,没有高深的编程,为初学者准备的例子。
朱兄的css布局之道告诉了大家发生问题的现象以及现象背后的缘由,相信这本JavaScript征途会带你走向前端开发一个新的高度。
正如此书的书名,《JavaScript征途》。我们从未停止对知识的渴望,一路同行,酷似长征。
尽管我们很努力,一路走来,总是磕磕绊绊。为什么?没人给你指引方向。《JavaScript征途》绝对是一部可以给你指引方向的良师益友。
从语言的特性开始到OOP思想。朱老师再次带我们领略的JavaScript的魅力。随着富客户端的出现,大量的JS代码的使用。没有很好基本功,我们怎么能用最少的语句写出效率更高的程序呢。此书从最基本的语法开始,一步步走向JS的深处。让我们更深刻的去理解JavaScript这门语言。如果你是个菜鸟,建议你通读此书。如果你是个老鸟,不妨放下案头的工作也看一看。惊喜多多啊。
随着WEB2.0概念的兴起。JS 被大量的应用。尤其进几年刚刚走红的AJAX无刷新技术的出现,将JavaScript语言推向了一个新的应用巅峰。可以说作为一个前端设计师,不懂得如何使用JavaScript基本就不算是一个好的设计师,(真无法想象,离开了JS 我们还有些什么东西可以更好的展现互联网应用)。
ooooooooo◥█◣oo ◣◢ooooooo◢█◤●o ◥◤o╭─╮o╭─╮ooo● 我來囉!!! o ● ◢│∩│█│∩│◣o ●o 帶來兩隻大閘蟹 o●█╰─╯█╰─╯█ ●oo 來簽ㄍ名!!...^0^ o︽█████████︽ooo◣◢.....◣◢ o︽████︾████︽ooo◥◤⊙ ⊙◥◤ o︽◥███████◤︽
好厚一本书啊 作者辛苦了,帮顶
那么多人推荐... 应该是本不错的书吧。 样章看了下,写的是有点意思。等宽裕了整本来收藏...
看目录 这本书介绍的 还挺细的 当参考书 应该不错
看书皮还不错,、 目录也还不错 如果书能在薄一些就好了!
翻过牛同学的CSS方面一本书,有收获,没钱在书店漂过 本次还打算去书店友情嫖过 市场的JS教程很多,每本教程的前半部分基本相同 ,所以我看书只关注后半部并决定是否花钱,去书店看了再来吼
我是朱老师的老读者了,他的书一直不错咯 打算收藏了,哈
封面挺好看 内容不知如何呢
看章节挺详细,不知道国内书怎么样
国人的书 持观望态度 不过看介绍还不错
巧妙的引喻和系统的分析是我觉得本书的一个亮点,很大程度上弥补了以前众多IT书籍知识含量大,但是吸收不好的缺憾,希望本书对国内web前端的学习再推动一个新的热潮~
对于JS了解不多,不过封面挺不多,作为水鬼,出来放点小水,为大家在征途的路上解解渴!
书不错,顶一个
这是一本读起来很愉快的书
老大的书讲的都很细的~~ 而且知识点应该算是比较全面的了~~
这本书什么时候一再网上订购。。很期待
确实是一本好书!内容详实,读起来也通俗易懂,很值得看的一本好书!
好厚一本书啊。作者辛苦了,帮顶一本好书!
都有出书了呀,多少 一本呀?不要太贵
支持一个,我是楼主的老读者了,楼主的书不错。不知什么时候可以在线购买了?
支持一个,我是楼主的老读者了,楼主的书不错。不知什么时候可以在线购买了?
顶楼上的粉丝,新朱控前来报到。
仔细看了一下目录,还是比较全面的,涵盖了JavaScript语言基础、DOM、BOM和Ajax,800多页的厚度,相信这本书有一定的份量,不会是那种轻浮的书。全书对于函数、以及函数式编程、OOP高级技术所列的知识点还是比较细致的,作者是位高手,对于JavaScript开发的核心技术把握得比较透彻,这正是我苦苦寻找的东东,很多JavaScript图书过于关注网页特效,以及DOM组件设计,说实在话本人不是很喜欢,那些东西在网上到处都可以找到,要玩转JavaScript,还是应该吃透核心技术和核心编程方法。
真的很感觉作者,继续试读了一下第1、4章内容,基本能够读懂,对于基本概念和基本知识点的挖掘也是很深的,读起来轻松,语言流畅,不是很艰涩,看来这本书不买不行了,电子工业出版社的书就是强,我以前也买过几本易飞思的书,都写得不错,:)
已下单,上来冒个泡,看目录是不错,有看过内容的及时上来发给贴,谈谈读后感吧!按说,冲着作者的资历,和目录的精致程度,这书是不赖的,希望内容也能实至名归。
书是不错。。
书是不错。。
本书是一本学习JavaScript语言的权威书籍,在遵循语言学习的特殊规律基础上精心选材,力争做到统筹、有序,在结构上体现系统性和完整性。同时还重点挖掘JavaScript基于对象的开发精髓及函数式编程两个技术核心。
本书内容全面,由浅入深,包括6篇21章,主要内容包括:JavaScript语言的基本特性,开发简单的JavaScript程序,JavaScript语法体系,数据、数据类型和变量,运算符和表达式,语句和结构,JavaScript函数, JavaScript对象,数组,字符串,使用正则表达式操纵字符串,客户端,控制文档结构的模型,JavaScript事件驱动模型,CSS,Cookie,XML和JSON,Ajax,深入JavaScript面向对象编程,深入JavaScript函数式编程,深入JavaScript动态化编程等。
本书适用于具有一定程序开发基础、准备学习JavaScript语言或希望提高JavaScript语言技巧的读者,还可作为相关培训班的教材。
JavaScript是目前流行的一门语言,在2009年3月Tiobe编程语言排行榜中位居第8位。作为一种轻型的、解释型的程序设计语言,虽然很多服务器端技术(如ASP)都支持JavaScript,但是JavaScript主要应用于Web前台开发,它以脚本的形式嵌入到网页文档内,由客户端浏览器负责解析和执行。
Web 2.0和Ajax概念的诞生,加快了JavaScript技术的成熟。目前,JavaScript技术被广泛应用于各种B/S架构的项目和不同类型的网站中。如果你是JavaScript语言初学者,或者是使用过JavaScript技术的熟手,甚至是精通JavaScript应用的高手,相信在阅读完本书之后,你会发现:JavaScript用法原来这么灵活,JavaScript技术原来如此深奥,JavaScript编程真的很有趣。
JavaScript语言最近几年发展速度比较快,有关JavaScript语言的技术图书也是汗牛充栋。当然,书总是越写越深入,越写越通俗。在仔细分析当前JavaScript图书存在的问题,并征求广大读者的意见之后,我萌生了另眼写作JavaScript的冲动。
JavaScript的优势在于灵活,而不是庞杂,同时它也是少数几种能够兼顾函数式编程和面向对象编程的语言,要全面认识JavaScript的语言特性,完全驾驭JavaScript技术,就应该有一本好的技术参考图书,本书的定位正是基于此,而不是简单的重复。
如果你因为难以消化外版图书的艰涩和枯燥,如果你因为被众多技术图书偏失所困惑,越读越糊涂,那么建议你试读本书。本书绝对让你读起来上瘾,读起来有意思,读得透悟和深入。
本书获得了计算机技术专业师生的首肯,并推荐选用,其优势可以简单概括为系统、深入和浅出。
本书是一部零起步,系统、深入浅出的JavaScript技术图书,特别适合以下3类读者群。
此外,本书也适合需要掌握以下技术的读者:
对于JavaScript技术来说,学习和实践一般不需要复杂的环境配置和辅助工具,读者只需要安装Web浏览器和文本编辑器即可。但是,要更有效地学习和实践,建议读者阅读1.8节内容。同时,运行本书中的示例,需要下列软件:
具体工具说明请参阅1.3.4节、1.4节和1.8节说明。
读者可以从作者个人网站(http://www.css8.cn)或飞思在线(http://www.fecit.com.cn的“下载专区”)的本书配套网页下载书中示例的完整源代码。
为了节省版面,本书所显示的示例代码都是局部的,读者需要在网页中输入 <script>标签,并尝试把书中列举的JavaScript脚本代码输入,然后在Web浏览器中试验,以验证代码运行效果。针对第16章到第18章的部分示例可能需要服务器端的配合,读者可以参阅示例所在章节的说明进行操作即可。
读者如果有任何问题、意见和想法,都可以随时与作者联系,作者的电子邮件地址是zhuyinhong@css8.cn,也可以经常浏览一下作者网站http://www.css8.cn,了解一些更新的内容和勘误信息,以便与作者或其他读者进行交流和讨论。
朱印宏
第1篇 壮志从戎
第1章 与初学者谈谈JavaScript学习 3
1.1 学之初,你应该清楚的几个概念 3
1.1.1 B/S和C/S 3
1.1.2 RWC和RIA 4
1.1.3 结构、行为和表现 4
1.2 审视JavaScript语言特性 5
1.2.1 JavaScript是一门灵活的脚本语言 5
1.过程化设计 6
2.定义原型方法 6
3.封装原型方法 6
4.造车不如设计标准 7
5.方法接龙 7
6.实例体验 8
1.2.2 JavaScript是基于对象的语言 8
1.万物皆为对象 8
2.奇怪的指针 9
3.灵活的用法 9
1.2.3 JavaScript是函数式语言 10
1.八面玲珑的函数 10
2.函数的作用域 11
3.奇怪的函数闭包 11
4.函数的上下文对象 11
1.3 JavaScript语言风云录 12
1.3.1 JavaScript寻根 12
1.3.2 三国志—JavaScript、JScript和ECMAScript 13
1.3.3 一个好汉三个帮—客户端的JavaScript实现 14
1.DOM 15 2.BOM 15
1.3.4 春秋五霸—令人生畏的浏览器混战和兼容 16
1.Mozilla 16
2.IE 16
3.Safari 17
4.Opera 17
5.Chrome 17
6.浏览器兼容方法 17
1.4 JavaScript运行环境 18
1.4.1 宿主环境 18
1.4.2 执行期环境 19
1.5 JavaScript解析机制 19
1.5.1 预编译 19
1.5.2 执行期 22
1.6 JavaScript执行顺序 23
1.6.1 按HTML文档流顺序执行JavaScript代码 23
1.6.2 预编译与执行顺序的关系 24
1.6.3 按块执行JavaScript代码 25
1.6.4 借助事件机制改变JavaScript执行顺序 26
1.6.5 JavaScript输出脚本的执行顺序 26
1.7 JavaScript应用范围 29
1.7.1 客户端的JavaScript 29
1.7.2 服务器端的JavaScript 30
1.7.3 其他环境的JavaScript 30
1.8 JavaScript开发工具箱 30
1.8.1 关于Web浏览器 30
1.8.2 关于JavaScript编辑器 31
1.8.3 关于JavaScript测试和调试工具 31
1.浏览器的错误控制平台 31
2.Firebug 33
3.HttpWatch 33
4.Web Developer Toolbar 34
5.JavaScript Debuger 34
第2章 Hello,World—JavaScript开发初体验 35
2.1 杨辉三角—第一个JavaScript程序 35
2.1.1 万物皆有规律—问题分析 37
2.1.2 递归算法设计 38
2.1.3 优化算法设计 39
2.1.4 输出杨辉三角 39
2.2 在网页中嵌入JavaScript脚本 40
2.2.1 使用script元素嵌入脚本 40
1.设置脚本类型 41
2.导入外部脚本文件 41
3.设置脚本的字符编码 42
4.设置脚本延迟执行 42
5.设置脚本在服务器端执行 42
2.2.2 探析外部脚本文件 42
1.导入外部脚本文件 43
2.何时使用外部JavaScript脚本文件 44
2.2.3 注意JavaScript脚本文件的关联性 44
2.2.4 使用接口技术解决JavaScript文件冲突 45
2.2.5 JavaScript文件与CSS文件导入和执行冲突 46
2.2.6 <script>标签在文档中的位置 48
2.2.7 杞人忧天—隐藏JavaScript脚本 49
2.2.8 关注细节—使用noscript元素 49
2.3 纠正编码习惯 50
2.3.1 JavaScript编码基本规范 51
1.JavaScript文件规范 51
2.代码缩进 51
3.代码长度 51
4.代码注释 51
5.变量声明 52
6.函数声明 52
7.标识符命名 52
8.语句 53
9.标签 53
2.3.2 思路梳理器—写好注释 53
1.单行注释 53
2.多行注释 54
2.3.3 留白的艺术—格式化代码 55
1.使用空行分隔代码块 55
2.空格是代码稀释剂 55
3.嵌套与缩进 55
4.换行缩进 56
5.大括号的位置 56
6.空结构的格式 56
7.单句结构的格式 56
2.4 程序调试 57
2.4.1 简单的手工调试 57
2.4.2 使用1st JavaScript Editor调试器进行调试 58
1.逐步调试 59
2.断点 60
3.观察 60
2.4.3 使用Microsoft Script Debugger进行调试 61
2.4.4 异常处理 63
1.异常处理的基本结构 64
2.异常处理中的兼容问题 64
3.打扫战场 66
第2篇 沙场秋点兵
第3章 运筹帷幄—俯瞰JavaScript语法体系 69
3.1 JavaScript语言词法基础 69
3.1.1 从字符编码开始接触JavaScript语言 70
3.1.2 认识JavaScript的实词和虚词概念 71
3.1.3 对大小写比较敏感的实词 72
3.1.4 实词类型 73
1.标识符 73
2.直接量 74
3.保留字 74
3.1.5 虚词类型 74
1.无意义的分隔符 75
2.有意义的分隔符 75
3.注释 76
3.2 JavaScript语言句法基础 77
3.2.1 认识句法三要素:词、句和段 77
1.段落 77
2.句子 78
3.词语 78
3.2.2 点号—逻辑域定位符 79
3.2.3 逗号—连续运算符 80
3.2.4 分号—语句分隔符 81
3.2.5 冒号—逻辑声明符 82
3.2.6 大括号—逻辑域分隔符 82
3.2.7 中括号—有序列表分隔符 84
3.2.8 小括号—强制运算符或逻辑分隔符 85
第4章 JavaScript血液系统—数据、数据类型和变量 89
4.1 从数据到类型 89
4.1.1 数据的本质 89
4.1.2 柔弱的JavaScript语言 90
4.1.3 JavaScript的基本数据类型 91
4.1.4 数之源—值类型和引用类型 92
4.1.5 原始值和引用值的操作本质 93
1.使用原始值 93
2.使用引用值 94
4.2 值类型数据 96
4.2.1 线性思维的符号—数值 96
1.数值直接量 96
2.八进制和十六进制数值 97
3.数值运算 97
4.特殊数值 98
4.2.2 形象思维的颜料—字符串 99
1.字符串直接量 99 2.转义序列 100
3.字符串操作 100
4.2.3 逻辑思维的卵细胞—布尔型 101
4.2.4 空无道人—null 101
4.2.5 人之初—undefined 102
4.3 引用类型数据 103
4.3.1 有序数据结构—数组 104
1.数组意象 104
2.第一次接触数组 105
4.3.2 离散数据结构—对象 105
1.对象意象 106
2.第一次接触对象 106
4.3.3 魔兽数据—函数 108
1.函数意象 108
2.大话函数演绎之路 108
3.探究奇特的函数解析机制 110
4.4 数据类型检测和转换 112
4.4.1 数据类型检测 113
1.使用typeof运算符 113
2.使用constructor属性 113
3.框架窗口的数组类型问题 114
4.设计更安全的数据类型检测方法 115
4.4.2 值类型数据的自动转换 117
4.4.3 引用型数据的自动转换 118
1.对象在逻辑运算环境中的
特殊情况 118
2.对象在数值运算环境中的
特殊情况 118
3.数组在数值运算环境中的
特殊情况 119
4.对象在模糊运算环境中的
情况处理 119
4.4.4 把值转换为字符串 120
1.使用加号运算符 120
2.圆滑的加号运算符 122
3.使用toString()方法 122
4.数字转换为字符串的模式问题 122
5.数字转换为字符串的位数问题 123
4.4.5 把值转换为数字 124
1.使用parseInt()函数 124
2.使用parseFloat()函数 125
3.使用乘号运算符 125
4.4.6 把值转换为布尔值 125
1.使用双重逻辑非运算符 125
2.使用Boolean()构造函数转换 126
4.4.7 装箱和拆箱 126
1.从值到引用—装箱 126
2.从引用到值—拆箱 127
4.4.8 数据类型的强制转换 128
4.5 使用变量 129
4.5.1 声明变量 129
1.变量声明的方法 129
2.3种变量命名法 130
4.5.2 丑陋的JavaScript变量 131
1.陋习一:变量没有类型 131
2.陋习二:变量可以重复声明 131
3.陋习三:变量可以隐式声明 132
4.陋习四:变量的灰色潜规则 132
4.5.3 不可跨越的门槛—变量的作用域 133
1.变量优先级问题 133
2.局部作用域的嵌套 134
3.利用函数作用域实现技术封装 134
4.变量的解析过程 135
5.被JavaScript忽略的块级作用域 136
6.函数闭包的作用域 136
4.5.4 圈里圈外—属性与变量 137
1.全局变量是全局对象的属性 137
2.局部变量是调用对象的属性 138
4.5.5 变量的作用域链 138
4.5.6 变量的垃圾回收 139
第5章 JavaScript肌肉系统—运算符、表达式 141
5.1 说说运算符和表达式 141
5.1.1 语言实际上就是数据和运算的交流工具 141
5.1.2 运算符是运算的解码器 142
5.1.3 走入运算符的童话世界 143
5.1.4 领略运算符的魔法法则 144
5.1.5 运算的人性化,还是随意性 146
5.1.6 警惕运算符的副作用 147
5.1.7 表达式是运算的最小逻辑单元 148
5.1.8 优化表达式的思维品质 148
5.2 天人合一——位运算符 151
5.2.1 位运算是整数的逐位运算 151
5.2.2 探秘二进制数运算奥秘 151
5.2.3 逻辑位运算 153
5.2.4 移位运算 155
5.3 童年无忌—算术运算符 157
5.3.1 加法的特殊运算 157
5.3.2 减法的特殊运算 158
5.3.3 乘法的特殊运算 159
5.3.4 除法的特殊运算 159
5.3.5 取模的特殊运算 160
5.3.6 取反运算 160
5.3.7 心脏起搏器—递增和递减 160
5.4 离散思维—字符串运算符 161
5.5 真真假假论乾坤—逻辑运算符 161
5.5.1 逻辑与运算 162
5.5.2 逻辑或运算符 164
5.5.3 逻辑非运算符 166
5.5.4 逻辑思维训练 166
5.6 货比三家—关系运算符 168
5.6.1 大小关系检测 168
5.6.2 包含关系检测 169
5.6.3 等值关系检测 170
5.7 复制数据—赋值运算符 172
5.8 对象操作运算符 174
5.8.1 女娲造人—new运算符 174
5.8.2 垃圾回收站—delete运算符 175
5.8.3 I/O接口—存取运算符 177
1.中括号运算符 177
2.点号运算符 178
5.8.4 光盘驱动器—函数调用运算符 179
5.9 其他运算符 180
5.9.1 迷你版分支逻辑—条件运算符 180
5.9.2 期待与收获—逗号运算符 181
5.9.3 俯首甘为孺子牛—void运算符 182
5.9.4 身份验证—类型检测运算符 183
第6章 JavaScript神经骨骼系统—语句、结构 185
6.1 从表达式到语句 185
6.1.1 什么是句子 186
6.1.2 两面性—表达式、表达式语句 188
6.1.3 群居性—复合语句 189
6.1.4 形影相随—句子、结构 190
6.1.5 不被执行的—声明语句 191
6.1.6 语句占位符—空语句 193
6.2 分支结构 193
6.2.1 if语句 193
6.2.2 if结构嵌套 194
1.错误的嵌套 194
2.正确的嵌套 195
6.2.3 else if语句 195
6.2.4 预防if结构嵌套的主观性 196
6.2.5 if结构中容易躲藏的Bug 197
6.2.6 switch语句 198
6.2.7 悟透default从句用法 200
6.2.8 恰当选用if结构和switch结构 202
6.2.9 分支结构中逻辑顺序的优化 204
6.3 循环结构 205
6.3.1 while语句 205
6.3.2 do/while语句 207
6.3.3 for语句 207
6.3.4 for/in语句 209
6.3.5 灵活使用for/in结构 210
6.3.6 如何正确选用while和for结构 212
1.从语义性角度比较 212
2.从思维模式角度比较 212
3.从达成目标角度比较 214
6.3.7 优化循环结构和提高循环效率 215
1.优化结构 215
2.避免不必要的重复操作 216
3.妥善定义循环变量 216
6.4 结构的逻辑干预 216
6.4.1 有序思维的锚点—标签语句 217
6.4.2 跳出往后执行—break语句 218
6.4.3 继续重新执行—continue语句 220
6.5 逻辑异常处理 222
6.5.1 剖析异常和异常种类 222
6.5.2 知法犯法—throw语句 223
6.5.3 异常处理器—try/catch/finally语句 223
6.6 函数体结构 225
6.6.1 惰性气体—function语句 225
6.6.2 函数输出接口—return语句 227
6.7 临时作用域结构—with语句 228
第3篇 初战告捷
第7章 盒子里的魔术——透视JavaScript函数 233
7.1 认识函数 233
7.1.1 函数是一段代码块 234
7.1.2 函数是一类数据 234
7.1.3 函数是一种对象 234
7.2 定义JavaScript函数 235
7.2.1 克隆结构—构造函数 235
7.2.2 复杂结构的常量—函数直接量 237
7.2.3 定义嵌套函数 238
7.3 函数定义方法比较 239
7.3.1 函数作用域的比较 239
7.3.2 解析机制的比较 240
7.3.3 兼容性和灵活性比较 241
7.4 探析函数基本用法 242
7.4.1 函数返回值 242
7.4.2 调用函数 243
7.4.3 函数的生命周期 244
7.4.4 函数的作用域 245
7.5 深入函数的参数 246
7.5.1 认识函数的形参和实参 247
7.5.2 参数管理器—Arguments对象 248
7.5.3 回调函数—callee属性揭秘 249
7.5.4 Arguments对象在实践中灵活应用 250
7.6 使用函数对象 251
7.6.1 获取函数形参个数 251
7.6.2 灵敏的指针—有趣的this关键字 252
7.6.3 双刃剑—正确使用this关键字 253
7.6.4 自定义函数属性和方法 255
7.6.5 储钱罐—巧用函数的属性实现蓄能 256
7.6.6 谁的属性和方法—this与函数属性和方法的混合使用 257
7.6.7 动态调用函数—诡异的call()和apply()方法 258
7.6.8 更改指针—call()和apply()方法高级应用 260
7.7 数据寄存器—闭包函数 262
7.7.1 认识闭包 262
7.7.2 分析闭包结构的基本特性 263
1.自闭特性 263 2.包裹特性 263
7.7.3 闭包的基本应用 264
第8章 大象也有形—把握JavaScript对象 267
8.1 初识对象 267
8.1.1 什么是对象 268
8.1.2 对象是如何出生的 268
8.2 对象类型 269
8.2.1 本地对象 269
8.2.2 内置对象 270
8.2.3 宿主对象 270
8.3 对象基本操作 270
8.3.1 创建对象 271
8.3.2 引用对象 271
8.3.3 销毁对象 272
8.4 对象的属性和方法 272
8.4.1 定义对象的属性 273
8.4.2 访问对象的属性 273
8.4.3 设置和删除对象属性 274
8.4.4 对象的方法 275
8.5 对象的作用域 276
8.5.1 公共作用域 276
8.5.2 私有作用域 277
8.5.3 静态作用域 277
8.5.4 变形怪杰—作用域中的this 278
8.6 构造对象、实例对象和原型对象 279
8.6.1 构造对象 279
1.构造对象的属性 280
2.构造对象的方法 280
8.6.2 实例对象 281
1.实例对象的属性 281
2.实例对象的方法 282
8.6.3 原型对象 282
1.认识原型对象 282
2.原型属性与实例属性之间的关系 284
3.通过原型方法扩展内置对象功能 285
8.7 构造器 285
8.7.1 引用构造器—constructor属性 285
8.7.2 构造器的原型继承 286
8.7.3 根据构造器判定对象类型 287
8.8 对象基本方法和应用 287
8.8.1 对象的字符串标志—toString()方法 288
8.8.2 对象的值—valueOf()方法 289
8.8.3 检测私有属性—hasOwnProperty()方法 290
8.8.4 检测枚举属性—propertyIsEnumerable()方法 291
8.8.5 检测原型对象—isPrototypeOf()方法 293
8.9 探析JavaScript核心对象 294
8.9.1 大象无形—Global对象 294
8.9.2 数学专家—Math对象 295
8.9.3 时间管理—Date对象 298
1.获取本地系统的当前时间 298
2.通过多选参数来创建指定的
时间对象 298
3.通过一个时间格式的字符串来
创建指定的时间对象 298
4.通过传递一个毫秒数来创建
指定的时间对象 298
第9章 有序世界的信使—操作数组 301
9.1 透视数据集合 301
9.1.1 数据集合的类型 301
9.1.2 特殊数集—哈希表 302
9.2 定义数组 303
9.3 数组基本操作 304
9.3.1 存取数组元素 304
9.3.2 能够自由伸缩的数组 305
9.3.3 数组的大小 306
9.3.4 对象与数组 306
9.3.5 暗度陈仓—定义多维数组 308
9.4 数组方法及其应用 309
9.4.1 检索数组元素 309
9.4.2 添加和删除元素 309
1.push()和pop()方法 310
2.unshift()和shift()方法 310
3.模拟队列数据结构的操作 311
4.粘连数组的concat()方法 311
9.4.3 子数组操作 312
1.删除和插入元素集合—splice()方法 312
2.截取子数组—slice()方法 313
9.4.4 数组排序 314
1.颠倒顺序—reverse()方法 314
2.数组排序—sort()方法 314
9.4.5 奇思妙想—更有趣的数组排序 315
1.根据奇偶性质排列数组 316
2.不区分大小写排序字符串 316
3.把浮点数和整数分开排列 317
9.4.6 数组与字符串相互转换 317
1.字符串通用转换—
toString()方法 317
2.本地字符串转换—
toLocalString()方法 318
3.更灵活的字符串转换—
join()方法 318
4.把字符串转换为数组—split()方法 318
9.5 灵活使用数组及其方法扩展 319
9.5.1 神奇的数组下标 319
1.文本下标 319
2.二维数组下标 320
3.对象下标 321
9.5.2 扩展数组的基本方法 321
9.5.3 为数组扩展通用迭代器 322
9.5.4 利用数组迭代器扩展数组方法 324
1.动态改变数组中每个元素的值 324
2.过滤数组元素 325
第10章 变相怪杰—驾驭字符串 327
10.1 伤心字符串:使用值还是使用引用 327
10.1.1 思考是发现问题的钥匙 327
10.1.2 直击字符串操作的真相 328
10.1.3 字符串是如何进行比较的 330
10.2 创建字符串 330
10.2.1 定义字符串直接量 330
10.2.2 构造字符串 331
10.2.3 使用字符编码创建字符串 332
10.3 使用字符串 333
10.3.1 获取字符串的字符和字节长度 333
10.3.2 连接字符串 335
10.3.3 查找字符串 335
1.获取指定位置的字符—charAt()和charCodeAt()方法 335
2.查找子字符串的位置—indexOf()和lastIndexOf()方法 336
3.匹配字符串—search()和match()方法 337
10.3.4 截取子字符串 339
1.根据长度截取子字符串—substr()方法 339
2.根据起止下标截取子字符串—slice()和substring()方法 339
10.3.5 编辑字符串 340
1.替换子字符串—replace()方法 340 2.字符串大小写转换 342
10.3.6 暗藏玄机—replace()方法深层技术探讨 342
10.3.7 比较字符串 344
10.3.8 把字符串转换为数组 345
10.3.9 字符串的类型和值 346
10.3.10 格式化字符串方法 347
10.4 String对象扩展及用法 348
10.4.1 模拟VBScript字符串处理函数 348
1.截取字符串左侧指定数目的字符—left()方法 348
2.截取字符串右侧指定数目的字符—right()方法 349
3.清除字符串首尾的空格—trim()方法 349
4.清除字符串左侧空格—lTrim()方法 350
5.清除字符串右侧空格—rTrim()方法 350
10.4.2 检测特殊字符 351
10.4.3 提高字符串连接操作效率 352
10.5 字符串加密和解密 352
10.5.1 JavaScript预定义编码和解码方法 352
1.字符串常规编码和解码—escape()和unescape()方法 353
2.URI字符串编码和解码—encodeURI()和decodeURI()方法 353
3.URI组件编码和解码—encodeURIComponent()和decodeURIComponent()方法 354
10.5.2 Unicode编码 355
10.5.3 Unicode解码 355
10.5.4 自定义加密和解密方法 356
第11章 灵异的牧羊犬—使用正则表达式操纵字符串 359
11.1 第六感觉—认识正则表达式 359
11.1.1 什么是正则表达式 359
11.1.2 正则表达式的发展历史 360
11.2 定义正则表达式 361
11.2.1 使用RegExp对象构造正则表达式 361
11.2.2 定义正则表达式直接量 363
11.3 正则表达式基本语法—字符类 364
11.3.1 认识普通字符和元字符 364
11.3.2 字符直接量 364
1.用ASCII码表示 364 2.用Unicode编码表示 365
11.3.3 定义简单字符类 366
11.3.4 定义反义字符类 366
11.3.5 定义字符范围类 367
11.3.6 预定义字符类 368
11.4 正则表达式基本语法—重复类数量词 369
11.4.1 简单重复性匹配 369
11.4.2 贪婪匹配 371
1.?、{n}和{n, m}重复类 371
2.*、+和{n, }重复类 372
11.4.3 惰性匹配 372
11.4.4 支配匹配 373
11.5 高级匹配模式 374
11.5.1 分组 374
11.5.2 分组的应用价值 375
11.5.3 引用 376
11.5.4 非引用型分组 377
11.5.5 选择 378
11.5.6 声明 380
11.5.7 边界 380
11.5.8 锚记 382
11.5.9 标志 382
11.6 操作RegExp对象 383
11.6.1 实例属性 383
11.6.2 静态属性 384
11.6.3 正则表达式的方法 386
1.灵活的匹配操盘手—exec()方法 386
2.匹配验证—test()方法 387
11.6.4 比较各种模式匹配的方法 388
第4篇 直捣黄龙
第12章 BOM—探访客户的秘密 393
12.1 认识浏览器对象模型(BOM) 393
12.2 客户端全局对象—Window 395
12.2.1 全局作用域 396
12.2.2 Window对象的生命周期 396
12.2.3 人机交互—学习JavaScript第一步 397
12.2.4 控制弹出窗口 398
12.2.5 框架之间的通信 399
1.窗口不等于框架 400
2.框架之间相互访问方式 400
3.框架之间JavaScript交互 400
12.3 检测客户浏览器信息—Navigator对象 401
12.3.1 了解常用浏览器检测方法 402
1.特征检测法 402
2.字符串检测法 402
12.3.2 检测浏览器类型和版本 403
12.3.3 检测客户端操作系统 404
12.4 客户端导航—Location和History对象 405
12.4.1 全球定位仪—Location对象 405
12.4.2 浏览简史—History对象 407
1.使用JavaScript访问历史记录 407
2.使用JavaScript访问帧的历史记录 408
12.5 窗口大小控制—Screen和Window对象 408
12.5.1 屏幕大小—Screen对象 408
12.5.2 窗口大小—Window对象 409
12.6 0级文档对象模型—Document对象 410
12.6.1 认识文档对象—Document 410
12.6.2 0级文档对象模型及其读写规则 411
12.6.3 动态生成文档 412
第13章 DOM—控制文档结构的模型 415
13.1 认识DOM 415
13.1.1 DOM发展概述 415
1.DOM 0级 416
2.DOM 1级 416
3.DOM 2级 416
4.DOM 3级 417
13.1.2 检测浏览器对DOM规范支持程度 417
13.1.3 DOM核心 419
13.1.4 DOM节点 420
13.2 操作DOM文档 422
13.2.1 HTML DOM加载过程及其处理 422
13.2.2 DOM文档支持的遍历指针 424
1.childNodes 425
2.firstChild和lastChild 425
3.parentNode 425
4.nextSibling和previousSibling 426
5.documentElement 426
13.2.3 文档遍历中的空格Bug及其清除 426
13.2.4 实现一个简单的文档遍历 427
13.2.5 扩展遍历指针函数 428
1.扩展firstChild和lastChild指针函数 429
2.扩展parentNode指针函数 429
3.扩展nextSibling和previousSibling指针函数 429
13.2.6 通过原型继承扩展DOM元素的方法 430
13.2.7 增加文档内容 433
13.3 操作DOM节点 435
13.3.1 获取节点 435
1.使用getElementById()方法 435
2.使用getElementByTagName()方法 436
13.3.2 创建节点 437
1.创建节点的基本用法 437
2.创建DOM元素的通用方法 438
13.3.3 复制节点 439
13.3.4 插入节点 440
1.使用appendChild()方法 440
2.使用insertBefore()方法 442
13.3.5 删除节点 442
1.删除节点的基本用法 443
2.封装删除节点的方法 443
3.封装删除所有子节点的方法 444
13.3.6 替换节点 444
13.4 操作元素的属性 445
13.4.1 获取节点属性 446
13.4.2 设置节点属性 447
13.4.3 删除节点属性 448
13.4.4 存取JavaScript属性 449
13.5 操作元素的内容 449
13.5.1 获取元素包含的文本 449
13.5.2 获取元素包含的HTML信息 450
第14章 Event—JavaScript事件驱动模型 453
14.1 认识JavaScript事件 453
14.1.1 你未必理解的事件概念 453
14.1.2 事件驱动模型 454
14.1.3 事件处理和监听函数 455
14.1.4 多线程与异步回调 456
14.2 事件流及其传播 456
14.2.1 事件传播过程 457
14.2.2 冒泡型事件流 457
14.2.3 捕获型事件流 459
14.2.4 DOM标准事件流 460
14.3 DOM 0级事件模型 460
14.3.1 原始事件的处理方式 460
14.3.2 斫石取火—定义事件 461
14.3.3 直接调用—事件处理函数之趣 463
14.3.4 冷落的返回值—事件处理函数之痕 464
14.3.5 隐形的参数—事件处理函数之谜 465
14.3.6 再说this—事件处理函数之惑 466
14.3.7 身在曹营心在汉—事件处理函数之域 467
14.4 DOM 2级事件模型 469
14.4.1 认识DOM 2级事件模型 469
1.事件模块与接口 470
2.DOM 2级事件模型的工作机制 470
3.Event接口 470 4.UIEvent接口 471
5.MouseEvent接口 471
6.MutationEvent接口 471
14.4.2 绑定和销毁事件 471
1.绑定事件 472
2.销毁事件 473
14.4.3 为对象注册多个事件处理函数 473
14.4.4 兼容0级事件模型的处理方法 474
14.4.5 兼容IE的事件处理方法 475
14.5 IE事件模型 475
14.5.1 认识IE事件模型 475
14.5.2 绑定和销毁事件 476
1.绑定事件 476
2.销毁事件 476
3.事件处理函数中的this 477
4.绑定多个事件 477
14.5.3 设计可兼容的Event对象 478
14.6 事件类型 478
14.6.1 事件类型概述 479
14.6.2 鼠标事件 481
1.鼠标点击事件类型 482
2.鼠标移动事件类型 482
3.鼠标经过事件类型 484
4.鼠标来源 485
5.鼠标定位 486
6.封装并应用鼠标定位设计方案 487
7.在元素内部定位鼠标指针 488
8.鼠标按键 489
9.鼠标事件响应顺序 489
14.6.3 键盘事件 490
1.认识键盘事件的属性 490
2.ctrlKey和shiftKey属性 491
3.keyCode和charCode属性 491
4.键盘事件响应顺序 493
14.6.4 页面事件 493
1.页面初始化—load事件类型 494
2.load事件类型的特殊引用 495
3.在页面初始化之前执行脚本—
DOMContentLoaded事件类型 496
4.页面卸载—unload事件类型 498
5.更人性化的页面卸载—beforeunload事件类型 499
6.窗口重置—resize事件类型 499
7.文档移动—scroll事件类型 500
8.错误捕获—error事件类型 500
14.6.5 UI事件 501
1.获取焦点—focus事件类型 501
2.失去焦点—blur事件类型 501
14.6.6 表单事件 501
1.选择文本—select事件类型 502
2.监测表单元素值变化—change
事件类型 502
3.提交表单—submit事件类型 503
4.重置表单—reset事件类型 504
第15章 CSS—设计HTML动态效果 507
15.1 DOM 2级样式控制模型 507
15.1.1 CSSStyleSheet接口 508
15.1.2 CSSStyleRule接口 508
15.1.3 CSSStyleDeclaration接口 509
15.2 DOM 0级样式控制模型 510
15.2.1 style对象 510
15.2.2 使用style对象读写行内样式 516
1.读取样式的属性值和属性名 516
2.设置样式的属性值 516
3.移除样式声明 517
4.检测声明中是否附加!important关键字 517
5.内行样式设置实战 517
15.2.3 styleSheets集合 519
15.2.4 访问CSS样式表 521
15.2.5 读写CSS规则 522
15.2.6 访问最终样式 525
1.IE的最终样式 525
2.DOM的最终样式 526
15.2.7 修改CSS样式的方法比较 526
1.关于修改class样式 527
2.关于修改id样式 527
15.3 尺寸 528
15.3.1 从CSS样式表中抽取元素尺寸 528
15.3.2 把抽取的尺寸转化为实际值 529
15.3.3 使用offsetWidth和offsetHeight获取元素的尺寸 531
15.3.4 超越offsetWidth和offsetHeight的缺陷 532
15.3.5 更复杂的元素尺寸 534
15.3.6 可视区域外滚动尺寸 537
15.3.7 浏览器窗口的尺寸 538
15.4 位置 539
15.4.1 获取元素在浏览器窗口中的位置 540
15.4.2 获取元素相对父元素的位置 543
15.4.3 获取元素相对包含块的位置 543
15.4.4 设置元素的偏移位置 544
15.4.5 设置元素的相对位置 544
15.4.6 获取鼠标指针的页面位置 545
15.4.7 获取鼠标指针在元素内的位置 546
15.4.8 获取页面滚动条的位置 548
15.4.9 设置页面滚动条的位置 549
15.5 显示和隐藏 549
15.5.1 元素的可见性 550
15.5.2 显示和隐藏功能封装 550
15.5.3 设置和获取元素的透明度 551
15.6 动画 552
15.6.1 定时器 553
1.setTimeout()方法 553
2.setInterval()方法 555
3.正确选用setTimeout()和setInterval()方法 555
15.6.2 滑动 556
15.6.3 渐隐渐显 557
第5篇 飞鸿传书
第16章 Cookie—用户信息存储、交互与安全 561
16.1 Cookie概述 561
16.1.1 Cookie回眸 561
16.1.2 Cookie信息的结构 562
16.2 存取Cookie信息 563
16.2.1 写入Cookie信息 563
16.2.2 设置Cookie有效期 563
16.2.3 设置Cookie的域和路径 564
16.2.4 设置Cookie安全传输 565
16.2.5 完善写入的Cookie信息 565
16.2.6 读取Cookie信息 566
16.2.7 修改和删除Cookie信息 567
16.2.8 Cookie的局限性及其突破 567
16.2.9 探测浏览器是否启用Cookie 569
16.3 Cookie封装与应用 569
16.3.1 Cookie封装 569
16.3.2 Cookie应用:打字测试游戏 571
第17章 XML和JSON—JavaScript数据处理模式 575
17.1 更通用的数据—XML 575
17.1.1 认识XML 575
17.1.2 XML文档结构概述 576
17.1.3 声明 577
17.1.4 处理指令 577
17.1.5 注释 578
17.1.6 标记和元素 578
17.1.7 XML属性 579
17.2 XML DOM文档对象模型 580
17.2.1 认识XML DOM文档对象模型 580
17.2.2 读取XML数据 582
17.3 IE对XML的支持 584
17.3.1 创建XML DOM对象 584
17.3.2 加载XML数据 585
1.设置加载模式 585
2.跟踪异步加载状态 585
17.3.3 数据加载错误处理 586
17.4 Mozilla对XML的支持 587
17.4.1 创建XML DOM对象 587
17.4.2 加载XML数据 588
17.4.3 读取XML数据 589
1.自定义方法模拟text属性的功能 589
2.自定义方法模拟xml属性的功能 589
17.5 XML数据导航器—XPath 590
17.5.1 XPath基本语法 590
17.5.2 IE对XPath的支持 592
17.5.3 Mozilla对XPath的支持 593
17.6 更敏捷的数据—JSON 595
17.6.1 JSON简介 595
17.6.2 深入JSON数据内核 598
1.数据的无序结构—对象 598
2.数据的有序结构—数组 598
3.数据的内容—值 599
第18章 Ajax—JavaScript通信接口与异步交互引擎 601
18.1 网络那点事儿—浓缩的HTTP 601
18.1.1 HTTP请求 602
18.1.2 HTTP响应 604
18.2 暗度陈仓—从隐藏框架说起 605
18.2.1 隐藏框架 605
18.2.2 异步交互与回调处理 608
18.2.3 使用iframe处理异步交互 611
18.3 巧连环—JSONP与跨域异步交互 613
18.3.1 小聪明大智慧—<script>标签背后的故事 613
18.3.2 动态控制script元素实现可控异步通信 615
18.3.3 script异步通信的参数传递 616
18.3.4 script异步通信的响应数据类型 620
18.3.5 JSONP异步通信协议 623
18.3.6 JSONP的安全问题 625
18.4 Ajax—更高效的异步通信接口 626
18.4.1 认识XMLHttpRequest对象 627
18.4.2 定义XMLHttpRequest对象 628
18.4.3 建立XMLHttpRequest请求连接 629
18.5 Request—发送请求 630
18.5.1 发送GET请求 630
18.5.2 发送POST请求 631
18.5.3 把数据转换为串行字符串 633
1.传输名/值对信息 633
2.传输有序数据列表 633
18.6 State—异步状态监测 634
18.6.1 跟踪Ajax异步通信状态 634
18.6.2 中止异步请求 636
18.7 Response—获取响应信息 636
18.7.1 XML 637
18.7.2 HTML 638
18.7.3 Code 639
18.7.4 JSON 640
18.7.5 Text 641
18.7.6 获取和设置头部消息 641
18.8 Ajax通信功能封装和应用 642
18.8.1 封装异步请求函数 642
18.8.2 使用Ajax改进Tab显示 643
第6篇 壮士凯旋
第19章 可视化思维—深入JavaScript面向对象编程 651
19.1 书非借不能读也—说类 651
19.1.1 类与对象 651
19.1.2 类成员:属性、方法和事件 652
19.1.3 类的基本特性:继承、封装和多态 652
19.2 定义JavaScript类 653
19.2.1 小老板为什么能年挣百万—工厂模式 653
19.2.2 拿来主义—构造函数模式 655
19.2.3 遗传栽培法—原型模式 657
19.2.4 杂交栽培法—构造函数原型模式 658
19.2.5 滴灌法—动态原型模式 660
19.3 契约书—JavaScript接口 661
19.3.1 新版黔驴技穷—大话接口 661
19.3.2 签订契约书—接口的本质 663
19.3.3 大道理简单化—JavaScript接口实现方法一 665
19.3.4 孔明点灯—JavaScript接口实现方法二 667
19.3.5 鸡肋还是鸡翅—JavaScript接口选用之惑 670
19.4 JavaScript继承机制—原型(prototype) 671
19.4.1 认识prototype 671
19.4.2 剪不断理还乱—辨析泛类、类型、原型和对象实例 672
19.4.3 形似神异—构造类的原型和本地特性 674
19.4.4 四大皆空—关于类的唯空论 676
19.4.5 原型属性的基本操作和应用技巧 678
1.利用原型为对象设置默认值 679
2.利用原型间接实现本地数据备份 680
3.利用原型设置只读属性 680
4.利用原型进行批量复制 682
19.4.6 定义静态原型方法 683
19.4.7 prototype原型域及原型链 683
19.4.8 prototype的副作用 685
19.5 JavaScript基因图谱—继承 686
19.5.1 认识JavaScript的继承机制 686
19.5.2 原型继承 688
19.5.3 类继承的源起 689
19.5.4 类继承的设计模式 690
19.5.5 深入理解类继承中call()和apply()角色 693
19.5.6 封装类继承机制 695
19.5.7 实例继承 696
19.5.8 复制继承 698
19.5.9 克隆继承 699
19.5.10 混合继承 699
19.5.11 多重继承 701
19.5.12 掺元类 702
19.6 类的封装 704
19.6.1 类的被动封装 705
19.6.2 类的主动封装 706
19.6.3 定义类的静态方法和属性 708
19.7 类的多态 710
19.7.1 方法的重载和覆盖 711
1.重载 711 2.覆盖 711
19.7.2 类的多态 712
19.8 善始善终—类的构造和析构 713
19.8.1 构造 714
19.8.2 动态构造 715
19.8.3 析构 716
19.9 类的抽象化—超类、子类和元类 717
19.9.1 超类和子类 717
19.9.2 元类 718
第20章 卜算子—深入JavaScript函数式编程 721
20.1 JavaScript函数式编程概述 721
20.1.1 函数是第一型 721
20.1.2 函数是运算元 722
20.1.3 函数是数据闭包 723
20.2 表达式运算 724
20.2.1 实现连续运算的常用方法 724
20.2.2 尝试把所有命令式语句转换为连续运算 727
20.2.3 表达式中的函数 728
20.2.4 函数的惰性与非惰性求值 730
20.2.5 函数调用栈 732
20.3 递归运算 734
20.3.1 认识递归 735
20.3.2 猜一猜,算一算—递归算法演示 736
20.3.3 递归算法 738
20.3.4 递归模型 738
1.问题的定义是递归的 738
2.问题所涉及的数据结构是递归的 739
3.问题的解法满足递归的性质 740
20.3.5 Hanoi(汉诺)塔算法 740
20.3.6 尾递归算法 742
20.3.7 Fibonacci(斐波那契)数列 744
20.3.8 递归算法的优化 746
20.4 高处不胜寒—破解函数域之惑 747
20.4.1 我是谁—JavaScript执行环境与函数解析机制 747
20.4.2 我从哪来—词法作用域与执行作用域 749
20.4.3 寻找迷失的远方—作用域链 751
20.4.4 我又在哪里—调用对象 753
20.5 天宫之旅—函数闭包 754
20.5.1 从圈外看闭包 754
20.5.2 从圈内看函数闭包 755
20.5.3 解剖闭包结构—认识闭包标识符系统 757
20.5.4 覆盖还是层叠—关于闭包函数的作用域问题 759
20.5.5 生存还是毁灭—关于闭包函数的生存周期问题 760
20.5.6 辨析函数与闭包 762
20.5.7 奇怪的不等式—函数、调用、引用和实例 763
20.5.8 梦里花落知多少—闭包函数与函数实例 765
20.5.9 剪不断理还乱—闭包函数与调用对象 769
20.5.10 保护闭包数据的独立性 771
20.5.11 始祖鸟—构造函数闭包 773
20.5.12 想你所想—函数式编程中闭包的应用价值 774
20.5.13 一起联想—函数式编程中闭包的桥梁作用 776
20.5.14 预防中毒—闭包的副作用 779
20.6 我是谁?—彻底研究this 782
20.6.1 who is this—确认this的身份 783
1.this代表当前对象 783
2.this代表当前作用域对象 784
20.6.2 what is this—this的本质 786
1.闭包的破坏性 787
2.call()和apply()方法的破坏性 788
3.异步调用的破坏性 788
20.6.3 where is this—在哪儿使用this 788
1.函数的引用和调用 788
2.call()和apply() 789
3.原型继承 790 4.异步调用之事件处理函数 791
5.异步调用之定时器 792
20.6.4 how to do this—this应对策略 792
1.预防this多变的基本原则 792
2.把this作为参数值 793
3.设计静态的this指针 793
4.设计静态的this扩展方法 794
第21章 流水不腐—深入JavaScript动态化编程 797
21.1 使用eval()方法动态执行语句 797
21.1.1 动态值、表达式和语句 797
21.1.2 对象和函数直接量的歧义问题 799
21.1.3 eval全局执行域及其兼容方法 800
21.1.4 eval当前执行域 802
21.2 动态调用函数 802
21.2.1 函数调用方法及执行效率比较 802
1.使用小括号运算符调用函数 803
2.使用new运算符调用函数 803
3.使用call()和apply()方法调用函数 804
4.使用定时器调用函数 804
5.使用事件处理函数调用函数 805
21.2.2 函数的调用对象 805
21.2.3 动态调用中的this指针 808
21.2.4 在动态调用中实现继承 810
21.2.5 动态调用中易迷失的this指针 810
21.2.6 嵌套函数调用中的副作用 812
21.3 动态重写 814
21.3.1 重写原型对象 814
21.3.2 重写构造器 816
21.3.3 重写方法 818
JavaScript征途超级群(50055214)