《JavaScript征途》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:朱印宏著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2009
  • ISBN:9787121090868
  • 页数:819 页
图书介绍:本书是一本JavaScript语言学习的权威性、系统性基础与提升读物,全书紧扣“成长”和“实录”两个关键词。在遵循语言学习的特殊规律基础上精心选裁,做到统筹、有序,在结构上体现语言学习的成长性。同时还将重点挖掘JavaScript基于对象的开发精髓,以及函数式编程两个技术核心。

第1篇 壮志从戎 3

第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篇 沙场秋点兵 69

第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篇 初战告捷 233

第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.根据起止下标截取子字符串——sfice()和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.清除字符串左侧空格——ITrim()方法 350

5.清除字符串右侧空格——rTrim()方法 350

10.4.2 检测特殊字符 351

10.4.3 提高字符串连接操作效率 352

10.5 字符串加密和解密 352

10.5.1 JavaScript预定义编码和解码方法 352

1.字符串常规编码和解码——eseape()和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篇 直捣黄龙 393

第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.使用getElementByld()方法 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篇 飞鸿传书 561

第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——JavaScriDt数据处理模式 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篇 壮士凯旋 651

第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