图书介绍

JavaScript王者归来PDF|Epub|txt|kindle电子书版本网盘下载

JavaScript王者归来
  • 月影著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302173083
  • 出版时间:2008
  • 标注页数:712页
  • 文件大小:139MB
  • 文件页数:752页
  • 主题词:JAVA语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

JavaScript王者归来PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 概论1

第1章 从零开始1

1.1 为什么选择JavaScript?1

1.1.1 用户的偏好——B/S模式1

1.1.2 在什么情况下用JavaScript2

1.1.3 对JavaScript的一些误解3

1.1.3.1 JavaScript和Java的关系3

1.1.3.2 披着C外衣的Lisp3

1.1.3.3 关于JavaScript的思维定势3

1.1.3.4 JavaScript是为业余爱好者设计的?4

1.1.3.5 JavaScript是面向对象的吗4

1.1.3.6 其他误解4

1.1.4 警惕!脚本诱惑5

1.1.5 隐藏在简单表象下的复杂度5

1.1.6 令人迷惑的选择——锦上添花还是雪中送炭6

1.1.7 回到问题上来7

1.2 JavaScript的应用范围7

1.2.1 客户端的JavaScript7

1.2.2 服务器端的JavaScript9

1.2.3 其他环境中的JavaScript9

1.3 JavaScript的版本10

1.3.1 浏览器中的JavaScript版本10

1.3.2 其他版本10

1.4 一些值得留意的特性11

1.4.1 小把戏——神奇的魔法代码11

1.4.2 为客户端服务——经典Hello World!的另一种JavaScript实现14

1.4.3 数据交互——JavaScript的一项强大功能16

1.4.4 JavaScript表面上的禁忌及如何突破这些禁忌17

1.5 安全性和执行效率19

1.5.1 数据安全——永远的敏感话题20

1.5.2 实战!攻击与防范20

1.5.3 不容马虎——时刻关注性能24

1.6 一个例子——JavaScript编写的计算器26

1.6.1 从需求分析开始——什么是计算器?26

1.6.2 系统设计——如何实现计算器?27

1.6.3 系统实现——计算器的最终实现32

1.6.4 持续改进——迭代的软件开发过程42

1.7 学习和使用JavaScript的几点建议44

1.7.1 像程序员一样地思考——程序员的四个境界44

1.7.2 吝惜你的代码47

1.7.3 学会在环境中调试47

1.7.4 警惕那些小缺陷47

1.7.5 思考先于实践——不要轻易动手写代码48

1.7.6 时刻回头——圣贤也无法完全预知未来48

1.8 关于本书的其余部分49

第2章 浏览器中的JavaScript50

2.1 嵌入网页的可执行内容50

2.1.1 在什么地方装载JavaScript代码50

2.1.2 关于代码的Script标签52

2.1.3 我的代码什么时候被执行——不同执行期的JavaScript代码52

2.1.4 拿来主义——引入外部的JavaScript文件54

2.2 赏心悦目的特效58

2.2.1 生命在于运动——DHTML的效果58

2.2.2 换一种风格——CSS的力量59

2.2.3 用JavaScript操作DOM——一个可拖动窗口的例子60

2.3 使用JavaScript来与用户交互62

2.3.1 创建一个弹出式帮助和进度条62

2.3.2 填错了哦66

2.4 绕开脚本陷阱66

2.4.1 现实并不总是完美的67

2.4.2 不能完全相信你所见到的67

2.5 总结68

第3章 开发环境和调试方法69

3.1 我能用什么来编写脚本——适合编写JavaScript的文本编辑器69

3.2 来自浏览器的支持72

3.2.1 主流浏览器72

3.2.2 非主流浏览器73

3.3 集成开发环境73

3.3.1 什么是集成开发环境73

3.3.2 我需要集成开发环境吗73

3.3.3 适合JavaScript的集成开发环境74

3.4 调试工具——提升开发效率的利器75

3.4.1 什么是调试75

3.4.2 原始的调试方法——利用输出语句、“反射”机制和调试对象来进行调试75

3.4.3 适合JavaScript的调试工具77

3.5 定位代码和调用堆栈79

3.5.1 Step by Step——单步和断点79

3.5.2 监视内存80

3.5.3 追踪问题的源头——查看调用堆栈81

3.5.4 遇到麻烦了——为什么我跟踪不到代码82

3.6 浏览器捕获异常82

3.6.1 异常处理机制——一个try/catch/finally模式的例子82

3.6.2 异常的种类84

3.6.3 应该在什么时候“吃掉”异常85

3.7 总结86

第二部分 JavaScript核心87

第4章 语言结构87

4.1 JavaScript的基本文法87

4.1.1 字符集87

4.1.2 大小写敏感89

4.1.3 分隔符89

4.1.4 词、句子和段落90

4.1.5 分号91

4.1.6 标记92

4.1.7 注释92

4.1.8 保留字92

4.2 常量和变量93

4.2.1 常量和变量93

4.2.2 变量的标识符94

4.2.3 变量的类型94

4.2.4 变量的声明94

4.2.5 变量的作用域96

4.3 表达式和运算符99

4.3.1 表达式100

4.3.2 运算符概述100

4.3.3 算术运算符101

4.3.4 关系运算符103

4.3.5 逻辑运算符105

4.3.6 位运算符107

4.3.7 赋值运算符108

4.3.8 其他运算符109

4.3.8.1 条件运算符109

4.3.8.2 逗号运算符109

4.3.8.3 对象运算符110

4.3.8.4 类型运算符113

4.3.8.5 void运算符113

4.3.8.6 函数调用运算符114

4.4 控制语句114

4.4.1 表达式语句114

4.4.2 语句块114

4.4.3 条件语句115

4.4.4 循环语句120

4.4.5 跳转语句123

4.4.6 异常处理语句125

4.4.7 其他语句127

4.4.7.1 var语句127

4.4.7.2 function语句127

4.4.7.3 with语句128

4.4.7.4 空语句128

4.5 总结129

第5章 数据类型130

5.1 基本数据类型130

5.1.1 数值130

5.1.2 字符串——一个字符串相关操作的例子132

5.1.3 布尔型134

5.2 数组和对象135

5.2.1 数组135

5.2.2 对象——一个构造函数的例子136

5.3 函数类型——一个函数和闭包的例子140

5.4 神奇的null和undefined142

5.4.1 null142

5.4.2 undefined——独一无二的类型142

5.5 正则表达式143

5.5.1 正则表达式常量143

5.5.2 正则表达式对象143

5.6 值类型和引用类型143

5.6.1 什么是值和值的引用144

5.6.2 使用值和使用引用145

5.6.3 值与引用的相互转换:装箱和拆箱147

5.7 类型识别与类型转换148

5.7.1 运行时类型识别——两个运行的类型识别的例子148

5.7.2 类型的自动转换及其例子150

5.7.3 强制类型转换及其例子151

5.7.4 高级用法——一个自定义类型转换的例子154

5.8 警惕数值陷阱156

5.8.1 困惑——浮点数的精度问题156

5.8.2 误差的修正及其例子156

5.9 总结158

第6章 函数159

6.1 函数定义和函数调用159

6.1.1 函数的定义159

6.1.1.1 声明式函数定义与函数表达式及其例子159

6.1.1.2 JavaScript函数的奥妙——魔法代码161

6.1.2 函数的调用163

6.2 函数的参数164

6.2.1 形参与实参164

6.2.2 Arguments对象166

6.2.2.1 一个使用Arguments对象检测形参的例子166

6.2.2.2 一个使用Arguments对象接收任意个数参数的例子167

6.2.2.3 一个使用Arguments对象模拟函数重载的例子168

6.2.3 参数类型匹配——一个利用arguments实现函数重载机制的例子170

6.3 函数的调用者和所有者173

6.3.1 函数的调用者173

6.3.2 函数的所有者——一个为函数指定所有者的例子174

6.3.3 动态调用——外来的所有者176

6.4 函数常量和闭包177

6.4.1 匿名的函数178

6.4.2 函数引用178

6.4.3 函数参数和函数返回值及其例子179

6.4.4 高级用法——闭包作为局部域与延迟求值181

6.5 高级抽象——Function类型和函数模版182

6.5.1 动态创建函数——一个利用Function实现Lambda算子的例子182

6.5.2 模式——函数工厂及其实例183

6.6 总结187

第7章 对象188

7.1 什么是对象188

7.2 对象的属性和方法188

7.2.1 对象的内置属性188

7.2.2 为对象添加和删除属性191

7.2.3 反射机制——枚举对象属性193

7.3 对象的构造193

7.3.1 构造函数——一个双精度浮点数封装类的例子193

7.3.2 缺省构造和拷贝构造196

7.3.3 对象常量197

7.4 对象的销毁和存储单元的回收197

7.5 JavaScript的内置对象198

7.5.1 Math对象198

7.5.2 Date对象——创建一个简单的日历199

7.5.3 Error对象202

7.5.4 其他内置对象202

7.5.5 特殊的对象——全局对象与调用对象203

7.6 总结203

第8章 集合205

8.1 数组和数组元素205

8.1.1 数组的构造205

8.1.2 数组常量206

8.1.3 数组元素206

8.2 数组对象和方法207

8.2.1 查找元素207

8.2.2 添加和删除元素207

8.2.3 集合操作及其范例208

8.2.3.1 join()方法208

8.2.3.2 reverse()方法209

8.2.3.3 sort()方法209

8.2.3.4 concat()方法209

8.2.3.5 slice()方法209

8.2.3.6 splice()方法210

8.2.3.7 toSgring()方法和toLocaleString()方法210

8.3 哈希表211

8.3.1 什么是哈希表211

8.3.2 哈希表的构造211

8.3.3 实现一个简单的HashTable类型212

8.4 高级用法——集合操作和闭包214

8.5 总结219

第9章 字符串220

9.1 字符串的构造220

9.1.1 字符串常量220

9.1.2 转义序列220

9.1.3 字符串构造函数221

9.2 字符串的使用221

9.2.1 比较字符串221

9.2.2 抽取和检索子串222

9.2.3 连接拆分字符串222

9.2.4 字符串的模式匹配——一个字符串格式校验的例子223

9.2.5 其他方法225

9.3 字符串与字符数组225

9.4 字符串与文本处理——JavaScript棋谱阅读器(一)226

9.4.1 需求分析——什么是棋谱和棋谱阅读器226

9.4.2 系统设计——棋谱和棋盘数据的字符串描述228

9.4.3 系统实现——解析和处理棋谱229

9.4.4 完整的棋谱阅读器231

9.5 总结231

第10章 正则表达式232

10.1 什么是正则表达式232

10.1.1 正则表达式的概念232

10.1.2 JavaScript中的正则表达式232

10.2 正则表达式的规则233

10.2.1 直接量字符233

10.2.2 字符类和布尔操作234

10.2.3 重复234

10.2.4 选择、分组和引用235

10.2.5 指定匹配的位置235

10.2.6 标志——高级模式匹配的规则236

10.3 模式匹配236

10.3.1 用于模式匹配的String方法及其例子236

10.3.2 用于模式匹配的RegExp方法240

10.3.2.1 一个使用exec()方法从身份证号码获取生日的例子240

10.3.2.2 一个使用test()方法遍历字符串的例子241

10.4 关于正则表达式包装对象242

10.4.1 RegExp对象——利用正则表达式实现全文检索242

10.4.2 RegExp的实例属性244

10.5 强大的正则表达式244

10.5.1 分析正则表达式的局部244

10.5.2 一个例子——强大的在线编辑器245

10.5.3 构造新的文法——一个在JSVM中实现JSVM2解析器的例子247

10.6 高级用法250

10.7 用正则表达式处理文本251

10.7.1 创建一个计价公式编辑器251

10.7.1.1 需求分析——什么是计价公式编辑器251

10.7.1.2 系统实现——计价公式编辑器的实现251

10.7.2 创建一个同步滚动歌词播放器255

10.7.2.1 需求分析——什么是同步滚动歌词播放器255

10.7.2.2 系统设计与实现——处理LRC歌词256

10.8 总结260

第三部分 浏览器与DOM261

第11章 浏览器对象261

11.1 Window对象——最基本的浏览器对象261

11.1.1 Window对象概览261

11.1.2 Window对象的生命周期262

11.1.3 Window对象的属性和方法264

11.1.4 一个多窗口应用的例子266

11.2 Document对象——浏览器窗口文档内容的代表267

11.2.1 Document对象概览267

11.2.2 动态生成的文档267

11.2.3 Document对象的基本信息270

11.2.4 Document对象的外观属性272

11.2.5 Document子对象接口273

11.2.5.1 一个遍历Anchors对象的例子274

11.2.5.2 一个颠倒图片的例子274

11.3 对话框和状态栏276

11.3.1 创建一个简单对话框276

11.3.2 其他类型的对话框277

11.3.2.1 模拟对话框——创建一个窗口对话框及一个对话框阻塞进行的例子277

11.3.2.2 showModalDialog和showModelessDialog——非W3C或ECMAScrip标准281

11.3.3 状态栏287

11.4 框架——上层的Window对象288

11.4.1 多框架应用288

11.4.2 框架之间的关系289

11.4.3 框架的命名289

11.4.4 子框架中的JavaScript290

11.4.5 框架的应用——多页签显示290

11.4.5.1 什么是页签291

11.4.5.2 页签的实现——创建一个包含页签的页面291

11.5 表单和表单对象293

11.5.1 Form对象及其范例293

11.5.2 定义表单元素296

11.5.3 客户端表单校验及其例子297

11.5.4 创建一款通用的客户端表单校验组件301

11.6 其他内置对象311

11.6.1 Navigator对象——浏览器总体信息的代表311

11.6.2 Screen对象——提供显示器分辨率和可用颜色数量信息312

11.6.3 Location对象——当前窗口中显示文档的URL的代表314

11.6.4 History对象——一个有趣的对象316

11.7 总结316

第12章 文档对象模型317

12.1 什么是DOM317

12.1.1 把文档表示为树318

12.1.2 树的节点318

12.1.3 DOM对象的通用属性和方法319

12.1.4 HTML结构和DOM对象的关系——用JavaScript通过DOM来操作HTML文档319

12.2 DOM与浏览器实现322

12.2.1 关于DOM HTML API322

12.2.2 DOM的级别和特性325

12.2.3 DOM的一致性325

12.2.4 差异性——浏览器的DOM方言326

12.3 一组“盒子”——DOM元素326

12.3.1 嵌套的“盒子”326

12.3.2 “盒子”和“盒子”内容的分类327

12.4 创建和删除节点328

12.4.1 构造全新的节点328

12.4.2 平面展开——通过文档元素直接创建330

12.4.3 回收空间——删除不用的节点333

12.5 访问和操纵DOM节点333

12.5.1 打开每一个盒子——遍历节点333

12.5.2 弄清层级关系——父子与兄弟334

12.5.3 如何搜索特定节点335

12.5.4 克隆节点——一个使用cloneNode()复制表格的例子339

12.5.5 移动节点及其范例341

12.5.6 关于添加新行和排序的小技巧344

12.6 读写数据——添加、修改和删除属性347

12.7 外观与行为348

12.7.1 DOM样式属性348

12.7.2 控制DOM元素的显示与隐藏348

12.7.3 改变颜色和大小——一个简单有趣的例子350

12.7.4 改变位置——创建一个绕圆圈旋转的文字351

12.7.5 编辑控制及其范例352

12.7.6 改变样式及其范例354

12.7.7 改变行为355

12.8 XML DOM356

12.8.1 什么是XML DOM356

12.8.2 如何使用XML DOM——一个利用XML实现多级关联下拉选择框的例子356

12.9 总结359

第13章 事件处理360

13.1 什么是事件360

13.1.1 消息与事件响应360

13.1.2 浏览器的事件驱动机制362

13.2 基本事件处理362

13.2.1 事件和事件类型362

13.2.2 事件的绑定363

13.2.3 直接调用事件处理函数364

13.2.4 事件处理函数的返回值365

13.2.5 带参数的事件响应及其例子366

13.2.6 “this”关键字367

13.3 标准事件模型367

13.3.1 起泡和捕捉——浏览器的事件传播368

13.3.2 事件处理函数的注册369

13.3.3 把对象注册为事件处理程序369

13.3.4 事件模块和事件类型370

13.3.5 关于Event接口371

13.3.5.1 Event接口的属性和方法372

13.3.5.2 UIEvent接口的属性373

13.3.5.3 MouseEvent接口的属性373

13.3.5.4 MutationEvent接口373

13.3.6 混合事件模型373

13.3.7 合成事件374

13.4 浏览器的事件处理模型实现374

13.4.1 Internet Explorer事件模型374

13.4.1.1 关于IE事件注册374

13.4.1.2 IE Event对象的属性376

13.4.1.3 IE中的事件起泡376

13.4.2 Netscape 4事件模型376

13.4.2.1 Netscape 4中的事件捕捉及其范例376

13.4.2.2 Netscape 4 Event对象的属性380

13.5 回调与用户自定义事件381

13.5.1 事件处理模式——一个实现简单事件处理模式的例子381

13.5.2 用户事件接口的定义383

13.5.3 事件代理和事件注册——一个实现标准事件接口的例子384

13.5.4 标准模式——事件分派和接收388

13.6 一个例子——增强数据表格391

13.6.1 什么是增强数据表格391

13.6.2 一个采用两重table嵌套方式固定表头的例子391

13.6.3 可变列宽的实现394

13.6.4 标记行——呈现有别于其他行的背景色396

13.6.5 小技巧——将代码添加到样式表397

13.7 总结399

第14章 级联样式表400

14.1 什么是级联样式表400

14.1.1 CSS样式和样式表400

14.1.2 CSS的标准化400

14.1.3 浏览器支持的CSS403

14.2 JavaScript与CSS404

14.2.1 CSS和DOM的关系404

14.2.2 CSS和IE的关系406

14.2.3 浏览器的CSS兼容性407

14.3 控制CSS改变页面风格407

14.3.1 实现结构与表现的分离及其范例407

14.3.2 使用JwaScript和CSS实现页面多种风格的实时替换413

14.4 总结416

第15章 数据存储的脚本化417

15.1 什么是cookie417

15.1.1 浏览器和客户端cookie417

15.1.2 cookie的属性418

15.2 cookie的客户端存取418

15.2.1 cookie的存储418

15.2.2 cookie的读取419

15.3 cookie的限制419

15.4 cookie示例——让问候更加温暖419

15.5 cookie对象的封装423

15.6 什么是userData425

15.6.1 浏览器和客户端userData425

15.6.2 userData的声明425

15.6.3 userData的属性和方法425

15.7 userData的客户端存取426

15.7.1 userData的存储和读取426

15.7.2 userData的安全性427

15.8 userData的限制427

15.9 userData与cookie的对比427

15.10 userData示例——一个利用userData实现客户端保存表单数据的例子427

15.11 总结432

第四部分 数据交互433

第16章 同步和异步433

16.1 什么是同步和异步433

16.2 超时设定和时间间隔434

16.3 定时器使用——侦听与拦截435

16.3.1 标准模式——监视器及其范例436

16.3.2 使用定时器时应当注意的问题437

16.4 一个例子——漂亮的Web时钟439

16.4.1 什么是Web时钟?439

16.4.2 最简单的Web时钟439

16.4.3 Web时钟的设计440

16.4.4 完整的Web时钟源代码440

16.5 总结445

第17章 XML DOM和XML HTTP446

17.1 什么是XML DOM对象446

17.1.1 XML DOM简介446

17.1.2 浏览器支持的XML DOM接口447

17.1.2.1 XML DOM标准接口447

17.1.2.2 IE的XML DOM组件448

17.1.2.3 操作XML文档——一个使用MSXML操作XML文档的例子450

17.2 XML DOM的版本兼容性——XML DOM的跨浏览器应用452

17.3 XML DOM的错误处理457

17.3.1 处理错误信息的ParseError对象457

17.3.2 包含错误信息的文档458

17.4 XML DOM操作XML文档458

17.4.1 访问节点458

17.4.2 创建新节点459

17.4.3 移动和修改节点及其范例460

17.4.4 读写节点属性和读写数据462

17.4.5 保存文档462

17.5 一个例子——JavaScript棋谱阅读器(二)462

17.5.1 用XML描述棋谱462

17.5.2 将XML棋谱转换为SGF棋谱463

17.6 什么是XML HTTP对象464

17.6.1 XML HTTP对象简介465

17.6.2 浏览器支持的XML HTTP对象465

17.7 通过XML HTTP发送请求465

17.7.1 建立连接466

17.7.2 发送请求466

17.8 读取和设定HTTP头466

17.8.1 什么是HTTP头466

17.8.2 读取和设定HTTP头467

17.9 服务器应答467

17.9.1 同步和异步应答及其例子468

17.9.2 包含应答文本内容的ResponseText和ResponseXML469

17.10 总结470

第18章 Ajax简介471

18.1 什么是Ajax471

18.1.1 Ajax并不神秘471

18.1.2 Ajax的应用场景471

18.1.3 Ajax的竞争对手——其他替代技术472

18.2 Ajax初探——我的第一个Ajax程序473

18.2.1 从常规应用开始——一个简单的实时聊天室473

18.2.2 讨厌的页面刷新475

18.2.3 无刷新解决方案——改进的聊天室475

18.2.4 异步工作——迟滞感的解决方案476

18.3 Ajax原理剖析478

18.3.1 XML HTTP实时通信及一个简单封装了AjaxProxy对象的例子478

18.3.2 数据动态显示——Ajax改善交互体验的重要特点481

18.3.3 发挥XML的能力484

18.3.4 用JavaScript绑定一切484

18.3.5 应用背后的标准484

18.4 Ajax范例——实时聊天工具485

18.4.1 什么是实时聊天工具485

18.4.2 需求分析——实时聊天功能的实现要点486

18.4.3 系统实现——实时聊天功能的实现486

18.4.4 小结487

18.5 总结488

第19章 标准和兼容性489

19.1 标准化组织489

19.1.1 W3C和DOM标准489

19.1.2 ECMA和JavaScript标准489

19.1.3 互联网标准490

19.2 平台和浏览器的兼容性490

19.2.1 最小公分母法490

19.2.2 防御性编码490

19.2.3 客户端探测器491

19.2.4 特性检测491

19.2.5 实现标准491

19.2.6 适度停止运行492

19.3 语言版本的兼容性492

19.3.1 language属性492

19.3.2 版本测试492

19.4 如何实现跨浏览器应用493

19.4.1 取舍——划定支持范围493

19.4.2 基础模块设计——独立兼容性检测494

19.4.3 划分运行级别495

19.4.4 给出正确的信息——不要让你的代码保持沉默496

19.4.5 充分的应用测试——“兼容性魔鬼”总会趁你不注意时“踢你的狗”497

19.4.6 靠近标准和就近原则497

19.5 展望未来498

19.6 总结498

第20章 信息安全499

20.1 用户的隐私信息499

20.2 禁止和受限制的操作500

20.2.1 受限制的属性500

20.2.2 受限制的操作501

20.2.3 脚本安全级别501

20.2.4 脚本调试502

20.3 警惕幕后的攻击者503

20.3.1 攻击的手段503

20.3.2 隐匿的数据流504

20.3.3 页面伪装504

20.3.4 发现蛛丝马迹504

20.3.5 防范的手段505

20.3.5.1 传输数据的加密505

20.3.5.2 对用户隐藏源代码506

20.4 同源策略507

20.4.1 什么是同源策略507

20.4.2 同源策略的利弊508

20.4.3 突破同源策略508

20.5 安全区和签名脚本508

20.5.1 可配置的安全策略方案508

20.5.2 Internet Explorer的安全区509

20.5.3 Netscape的签名脚本509

20.6 代码本身的安全——加密和混淆509

20.6.1 为什么要加密和混淆509

20.6.2 客户端的加密技术及其例子509

20.6.3 代码混淆原理510

20.6.4 JavaScript代码混淆工具——一个代码混淆算法的例子511

20.6.5 加密和混淆的结合使用515

20.7 总结516

第五部分 超越JavaScript517

第21章 面向对象517

21.1 什么面向对象517

21.1.1 类和对象518

21.1.2 公有和私有——属性的封装519

21.1.3 属性和方法的类型521

21.2 神奇的prototype522

21.2.1 什么是prototype523

21.2.2 prototype的使用技巧525

21.2.2.1 给原型对象添加属性525

21.2.2.2 带默认值的Point对象526

21.2.2.3 delete操作将对象属性恢复为默认值527

21.2.2.4 使用prototype巧设getter529

21.2.2.5 delete操作恢复原型属性的可见性530

21.2.2.6 使用prototype创建大量副本533

21.2.2.7 使用prototype定义静态方法533

21.2.3 prototype的实质及其范例534

21.2.4 prototype的价值与局限性535

21.3 继承与多态537

21.3.1 什么是继承537

21.3.2 实现继承的方法538

21.3.2.1 构造继承法及其例子538

21.3.2.2 原型继承法及其例子541

21.3.2.3 实例继承法及其例子544

21.3.2.4 拷贝继承法及其例子546

21.3.2.5 几种继承法的比较547

21.3.2.6 混合继承法及其例子547

21.3.3 单继承与多重继承548

21.3.4 接口及其实现549

21.3.5 多态及其实现551

21.4 构造与析构553

21.4.1 构造函数553

21.4.2 多重构造554

21.4.3 析构555

21.5 疑团!“this”迷宫556

21.5.1 无数个陷阱——令人困扰的“this”谜团556

21.5.1.1 this代词的运用557

21.5.1.2 this“陷阱”558

21.5.1.3 this代词的异步问题559

21.5.2 偷梁换柱——不好的使用习惯560

21.5.3 异步调用——谁动了我的“this”561

21.5.4 揭开真相——JavaScript的“this”本质562

21.5.5 困难不再——利用闭包修正“this”引用562

21.6 包装对象563

21.6.1 区分值和引用563

21.6.2 装箱与拆箱565

21.7 元类,类的模板567

21.7.1 什么是元类567

21.7.2 元类——构造类的类568

21.7.3 为什么要用元类570

21.7.4 类工厂570

21.7.4.1 什么是类工厂570

21.7.4.2 为什么要建立类工厂571

21.8 谁才是造物主571

21.8.1 万物适用的准则571

21.8.2 抽象的极致——一个抽象模式的例子572

21.8.3 返璞归真,同源架构574

21.9 总结575

第22章 闭包与函数式编程576

22.1 动态语言与闭包576

22.1.1 动态语言576

22.1.2 语法域和执行域577

22.1.3 JavaScript的闭包——一个体现闭包本质的例子577

22.2 闭包的特点与形式579

22.2.1 闭包的内在——自治的领域580

22.2.2 访问外部环境——一个用闭包改变外部环境的例子581

22.2.3 闭包和面向对象583

22.2.4 其他形式的闭包584

22.3 不适合使用闭包的场合585

22.4 函数式编程585

22.4.1 什么是函数式编程585

22.4.1.1 函数是第一型586

22.4.1.2 闭包与函数式编程586

22.4.1.3 科里化(Currying)——一个有趣的概念587

22.4.1.4 延迟求值和延续——一个Fibonacci无穷数列的例子588

22.4.2 函数式编程、公式化与数学模型——一个抛物线方程的例子591

22.4.3 函数式编程的优点592

22.4.3.1 单元测试方面的优点593

22.4.3.2 调试方面的优点593

22.4.3.3 并行方面的优点593

22.4.3.4 代码热部署方面的优点594

22.4.3.5 机器辅助的推理和优化594

22.4.4 函数式编程的缺点594

22.4.4.1 闭包的副作用595

22.4.4.2 递归的形式595

22.4.4.3 延迟求值的副作用595

22.5 闭包与面向对象595

22.5.1 私有域596

22.5.2 名字空间管理597

22.5.3 友元——一个非常有趣的概念598

22.6 Python风格的JavaScript代码600

22.6.1 最简约代码600

22.6.2 轻量级重用600

22.6.2.1 JSON600

22.6.2.2 Functional601

22.6.2.3 迭代函数——一个Array迭代函数的例子601

22.6.3 模块管理及其范例605

22.7 总结606

第23章 模块级管理607

23.1 模块化管理607

23.1.1 模块化——代码的重用607

23.1.2 JavaScript的模块管理607

23.2 开放封闭原则和面向接口609

23.2.1 开放封闭原则609

23.2.2 面向接口610

23.3 名字空间管理610

23.3.1 什么是名字空间611

23.3.2 为什么要用名字空间611

23.3.3 JavaScript的名字空间管理611

23.4 调用依赖614

23.4.1 模块的依赖性614

23.4.2 模块依赖的管理615

23.5 用代码管理代码616

23.5.1 运行时环境的管理616

23.5.2 托管代码——一个简单的托管代码“容器”616

23.5.3 一个完整的代码管理容器617

23.6 总结620

第24章 动态构建621

24.1 让代码去写代码621

24.1.1 脚本的动态解析621

24.1.2 语法扩展——创造属于自己的语言621

24.2 “发明”语法623

24.2.1 正则表达式和语法解析及例子623

24.2.2 一个简单的语法解析器实现627

24.2.2.1 什么是JavaScript 2.0语法627

24.2.2.2 JavaScript 2.0语法的部分关键特性实现629

24.3 实现自己的方言——LispScript629

24.3.1 从JavaScript到Lisp629

24.3.2 最初的工作——一般JavaScript代码630

24.3.3 公理,表达式632

24.3.4 函数式编程的七条基本公设632

24.3.4.1 “引用”公设632

24.3.4.2 “原子”公设633

24.3.4.3 “等值”公设634

24.3.4.4 “表头”公设634

24.3.4.5 “余表”公设635

24.3.4.6 “和表”公设635

24.3.4.7 “条件”公设636

24.3.5 函数文法636

24.3.6 使用LispScript定义新函数639

24.3.7 一个惊喜——_eval641

24.3.8 其他的扩展642

24.3.9 小结642

24.3.10 运行环境和代码容器——看看“新发明”的LispScript的实际表现643

24.4 总结646

第25章 执行效率647

25.1 为什么要讨论执行效率647

25.1.1 来自客户的抱怨——JavaScript能有多慢647

25.1.2 代码慢下来是谁的错650

25.2 封闭的代价651

25.2.1 过度封装的性能问题651

25.2.2 信息隐藏的利弊654

25.2.3 构造对象的开销656

25.3 盒子里的流火658

25.3.1 DOM的内存开销659

25.3.2 浏览器的内存管理660

25.3.3 看清一个事实——内存泄漏的存在660

25.3.4 注意——及时关闭你的“盒子”660

25.3.5 一些误会的澄清661

25.3.5.1 脚本动态创建DOM导致内存泄漏661

25.3.5.2 闭包导致内存泄漏662

25.4 动态——魔鬼与天使662

25.4.1 动态解析的性能分析——一个动态特性的效率测试663

25.4.2 开发效率与执行效率——永远的困难选择665

25.4.3 优美与适用——学会经受魔鬼的诱惑665

25.4.4 扮演客户眼中的天使665

25.5 让代码轻舞飞扬666

25.5.1 简单就是美——为代码瘦身666

25.5.2 最完美的运用是不用666

25.5.3 高度抽象是为了简化问题667

25.5.4 逻辑和表达同样重要668

25.5.5 保持代码的严谨669

25.5.6 漂亮的书写风格——让阅读者心情愉快669

25.6 总结670

第26章 应用框架671

26.1 应用框架概览671

26.1.1 什么是应用框架671

26.1.2 应用框架的组成部分671

26.1.2.1 类库671

26.1.2.2 核心模块671

26.1.2.3 环境配置672

26.1.2.4 使用手册673

26.2 为什么要设计应用框架674

26.2.1 应用框架的适用范围674

26.2.2 应用框架的利弊674

26.3 如何设计应用框架675

26.3.1 把握设计的目标675

26.3.2 应用框架的设计准则676

26.3.3 什么样的应用框架才是成熟的应用框架676

26.3.4 应用框架的设计方法677

26.3.5 实战!设计一个简单的应用框架677

26.3.5.1 自描述677

26.3.5.2 基础接口和语义型代码678

26.3.5.3 核心对象的原型扩展680

26.3.5.4 简单方法682

26.3.5.5 名字空间683

26.3.5.6 支持标准和跨浏览器684

26.3.5.7 事件模型——Silverna的事件模型685

26.3.5.8 应用模式689

26.3.5.9 提供Ajax组件690

26.3.5.10 内存管理和其他693

26.4 框架的实际应用——在Silverna 2.0框架上开发的Widgets693

26.5 已存在的应用框架701

26.5.1 Prototype702

26.5.2 JQuery704

26.5.3 Dojo705

26.5.4 JSVM708

26.5.5 其他框架710

26.5.5.1 Bindows(成立于2003年)710

26.5.5.2 BackBase(成立于2003年)711

26.5.5.3 DOJO(开发中,成立于2004年9月)711

26.5.5.4 Open Rico(开发中,成立于2005年5月,基于早期的一个proprietary框架)711

26.5.5.5 qooxdoo(开发中;成立于2005年5月)711

26.5.5.6 Tibet(开发中,创建于2005年6月)711

26.5.5.7 AJFORM(创建于2005年6月)712

26.6 总结712

热门推荐