你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。.\r\n
本书分为五个部分循序渐进地与读者讨论了JavaScript的方方面面,从简单的语言基础到丰富的实际应用再到深入剖析语言本质的高级话题,字里行间包含着作者多年工作中对JavaScript实践乃至程序设计思想的深入思考和总结。..\r\n
本书揭开了JavaScript的面纱,绕过误解和虚幻的表象,引领你探索程序王国的奥妙。它既是一本为初学者准备的入门级教程,又是一本探寻程序设计思想本源的“魔法典籍”,也是一本Web开发工程师们需要的案头参考书。\r\n
本书是你进入脚本王国的一把钥匙,引导你领略脚本魔法的神奇魅力。它还是一本着眼于未来改变互联网的启蒙读物,在它的引领下,你将在互联网的世界里获得你所希望得到的知识、智慧、成就和快乐。...
第一部分 概论.
第一章 从零开始
1.1 为什么选择JavaScript?
1.1.1 用户的偏好:B/S模式
1.1.2 在什么情况下用JavaScript
1.1.3 对JavaScript的一些误解
1.1.3.1 JavaScript和Java
1.1.3.2 披着C外衣的Lisp
1.1.3.3 思维定势
1.1.3.4 业余爱好者
1.1.3.5 面向对象
1.1.3.6 其他误解
1.1.4 警惕!脚本诱惑
1.1.5 隐藏在简单表象下的复杂度
1.1.6 令人迷惑的选择:锦上添花还是雪中送炭
1.1.7 回到问题上来
1.2 JavaScript的应用范围
1.2.1 客户端的JavaScript
1.2.2 服务器端的JavaScript
1.2.3 其他环境中的JavaScript
1.3 JavaScript的版本
1.3.1 浏览器中的JavaScript版本
1.3.2 其他版本
1.4 一些值得留意的特性
1.4.1 小把戏:神奇的魔法代码
1.4.2 为客户端服务
1.4.3 数据交互
1.4.4 表面上的禁忌
1.5 安全性和执行效率
1.5.1 数据安全:永远的敏感话题
1.5.2 实战!攻击与防范
1.5.3 不容马虎:时刻关注性能
1.6 一个例子——JavaScript编写的计算器
1.6.1 从需求分析开始:什么是计算器?
1.6.2 系统设计:如何实现计算器?
1.6.3 系统实现:计算器的最终实现
1.6.4 持续改进:迭代的软件开发过程
1.7 学习和使用JavaScript的几点建议
1.7.1 像程序员一样地思考
1.7.2 吝惜你的代码
1.7.3 学会在环境中调试
1.7.4 警惕小缺陷
1.7.5 思考先于实践
1.7.6 时刻回头
1.8 关于本书的其余部分
第二章 浏览器中的JavaScript
2.1 嵌入网页的可执行内容
2.1.1 在什么地方装载代码
2.1.2 代码的Script标签
2.1.3 我的代码什么时候被执行
2.1.4 拿来主义:引入外部文件
2.2 赏心悦目的特效
2.2.1 生命在于运动
2.2.2 换一种风格
2.2.3 我的地盘我做主
2.3 与用户交互
2.3.1 悄悄地告诉你
2.3.2 填错了哦
2.4 绕开脚本陷阱
2.4.1 现实并不总是完美的
2.4.2 不能完全相信你所见到的
2.5 总结
第三章 开发环境和调试方法
3.1 我能用什么来编写脚本
3.1.1 适合编写JavaScript的文本编辑器
3.2 来自浏览器的支持
3.2.1 主流浏览器
3.2.2 非主流浏览器
3.3 集成开发环境
3.3.1 什么是集成开发环境
3.3.2 我需要集成开发环境吗
3.3.3 适合JavaScript的集成开发环境
3.4 调试工具:提升开发效率的利器
3.4.1 什么是调试
3.4.2 原始的调试方法
3.4.3 适合JavaScript的调试工具
3.5 定位代码和调用堆栈
3.5.1 Step by Step:单步和断点
3.5.2 监视内存
3.5.3 追踪问题的源头:查看调用堆栈
3.5.4 遇到麻烦了:为什么我跟踪不到代码
3.6 浏览器捕获异常
3.6.1 异常处理机制
3.6.2 异常的种类
3.6.3 应该在什么时候“吃掉”异常
3.7 总结
第二部分 JavaScript核心
第四章 语言结构
4.1 基本文法
4.1.1 字符集
4.1.2 大小写敏感
4.1.3 分隔符
4.1.4 词、句子和段落
4.1.5 分号
4.1.6 标记
4.1.7 注释
4.1.8 保留字
4.2 常量和变量
4.2.1 常量和变量
4.2.2 变量的标识符
4.2.4 变量的声明
4.2.5 变量的作用域
4.3 表达式和运算符
4.3.1 表达式
4.3.2 运算符概述
4.3.3 算术运算符
4.3.4 关系运算符
4.3.5 逻辑运算符
4.3.6 位运算符
4.3.7 赋值运算符
4.3.8 其他运算符
4.3.8.1 条件运算符
4.3.8.2 逗号运算符
4.3.8.3 对象运算符
4.3.8.4 类型运算符
4.3.8.5 void运算符
4.3.8.6 函数调用运算符
4.4 控制语句
4.4.1 表达式语句
4.4.2 语句块
4.4.3 条件语句
4.4.4 循环语句
4.4.5 跳转语句
4.4.6 异常处理语句
4.4.7 其他语句
4.4.7.1 var 语句
4.4.7.2 function语句
4.4.7.3 with语句
4.4.7.4 空语句
4.5 总结
第五章 数据类型
5.1 基本数据类型
5.1.1 数值
5.1.2 字符串
5.1.3 布尔型
5.2 数组和对象
5.2.1 数组
5.2.2 对象
5.3 函数类型
5.3.1 函数
5.4 null和undefined
5.4.1 null
5.4.2 undefined
5.5 正则表达式
5.5.1 正则表达式常量
5.5.2 正则表达式对象
5.6 值类型和引用类型
5.6.1 什么是值和值的引用
5.6.2 使用值和使用引用
5.7 类型识别与类型转换
5.7.1 运行时类型识别
5.7.2 类型的自动转换
5.7.3 强制类型转换
5.7.4 高级用法
5.8 警惕数值陷阱
5.8.1 困惑:浮点数的精度问题
5.8.2 误差的修正
5.9 总结
第六章 函数
6.1 函数定义和函数调用
6.1.1 函数的定义
6.1.2 函数的调用
6.2 函数的参数
6.2.1 形参与实参
6.2.2 Arguments对象
6.2.3 参数类型匹配
6.3 函数的调用者和所有者
6.3.1 函数的调用者
6.3.2 函数的所有者
6.3.3 动态调用:外来的所有者
6.4 函数常量和闭包
6.4.1 匿名的函数
6.4.2 函数引用
6.4.3 函数参数和函数返回值
6.4.4 高级用法
6.5 高级抽象: Function类型和函数模版
6.5.1 动态创建函数
6.5.2 模式:函数工厂
6.6 总结
第七章 对象
7.1 什么是对象
7.2 对象的属性和方法
7.2.1 对象的内置属性
7.2.2 为对象添加和删除属性
7.2.3 反射机制:枚举对象属性
7.3 对象的构造
7.3.1 构造函数
7.3.2 缺省构造和拷贝构造
7.3.3 对象常量
7.4 对象的销毁和存储单元回收
7.5 JavaScript内置对象
7.5.1 Math对象
7.5.2 Date对象
7.5.3 Error对象
7.5.4 其他内置对象
7.5.5 特殊的对象:全局对象与调用对象
7.6 总结
第八章 集合
8.1 数组和数组元素
8.1.1 数组的构造
8.1.2 数组常量
8.1.3 数组元素
8.2 数组对象和方法
8.2.1 查找元素
8.2.2 添加和删除元素
8.2.3 集合操作
8.2.3.2 reverse()方法
8.2.3.3 sort()方法
8.2.3.4 concat()方法
8.2.3.5 slice()方法
8.2.3.6 splice()方法
8.2.3.7 toSgring()方法和toLocaleString()方法
8.3 哈希表
8.2.1 什么是哈希表
8.2.2 哈希表的构造
8.2.3 实现HashTable类型
8.4 高级用法
8.4.1 集合操作和闭包
8.5 总结
第九章 字符串
9.1 字符串的构造
9.1.1 字符串常量
9.1.2 转义序列
9.1.3 字符串构造函数
9.2 字符串的使用
9.2.1 比较字符串
9.2.2 抽取和检索子串
9.2.3 连接拆分
9.2.4 模式匹配
9.2.5 其他方法
9.3 字符串与字符数组
9.4 字符串与文本处理
9.4.1 JavaScript棋谱阅读器(一)
9.4.1.1 需求分析:什么是棋谱和棋谱阅读器
9.4.1.2 系统设计:棋谱和棋盘数据的字符串描述
9.4.1.3 系统实现:解析和处理棋谱
9.4.1.4 完整的棋谱阅读器
9.5 总结
第十章 正则表达式
10.1 什么是正则表达式
10.1.1 正则表达式的概念
10.1.2 JavaScript中的正则表达式
10.2 正则表达式的规则
10.2.1 直接量字符
10.2.2 字符类和布尔操作
10.2.3 重复
10.2.4 选择、分组和引用
10.2.5 指定匹配的位置
10.2.6 标志
10.3 模式匹配
10.3.1 用于模式匹配的String方法
10.3.2 用于模式匹配的RegExp方法
10.4 正则表达式包装对象
10.4.1 RegExp对象
10.4.2 RegExp的实例属性
10.5 强大的正则表达式
10.5.1 分析正则表达式的局部
10.5.2 一个例子——强大的在线编辑器
10.5.3 构造新的文法
10.6 高级用法
10. 7 用正则表达式处理文本
10.7.1 计价公式编辑器
10.7.1.1 需求分析:什么是计价公式编辑器
10.7.1.2 系统实现:计价公式编辑器的实现
10.7.2 同步滚动歌词播放器
10.7.2.1 需求分析:什么是同步滚动歌词播放器
10.7.2.2 系统设计与实现:处理LRC歌词
10. 8 总结
第三部分 浏览器与DOM
第十一章 浏览器对象
11.1 Window对象
11.1.1 Window对象概览
11.1.2 Window对象的生命周期
11.1.3 Window属性和方法
11.2 Document对象
11.2.1 Document对象概览
11.2.2 动态生成的文档
11.2.3 Document对象的基本信息
11.2.4 Document对象的外观属性
11.2.5 子对象接口
11.3 对话框和状态栏
11.3.1 简单对话框
11.3.2 其他类型的对话框
11.3.2.1 模拟对话框
11.3.2.2 showModalDialog和showModelessDialog
11.3.3 状态栏
11.4 框架
11.4.1 多框架应用
11.4.2 框架之间的关系
11.4.3 框架的命名
11.4.4 子框架中的JavaScript
11.4.5 框架的应用——多页签显示
11.4.5.1 什么是页签
11.4.5.1 页签的实现
11.5 表单和表单对象
11.5.1 Form对象
11.5.2 客户端表单校验
11.5.3 通用的客户端表单校验组件
11.6 其他内置对象
11.6.1 Navigator对象
11.6.2 Screen对象
11.6.3 Location对象
11.6.4 History对象
11.7 总结
第十二章 文档对象模型
12.1 什么是DOM
12.1.1 把文档表示为树
12.1.2 树的节点
12.1.3 DOM对象的通用属性和方法
12.1.4 HTML结构和DOM对象的关系
12.2 DOM与浏览器实现
12.2.1 DOM HTML API
12.2.2 DOM的级别和特性
12.2.3 DOM的一致性
12.2.4 差异性:浏览器的DOM方言
12.3 一组“盒子”:DOM元素
12.3.1 嵌套的“盒子”
12.3.2 “盒子”和“盒子”内容的分类
12.4 创建和删除节点
12.4.1 构造全新的节点
12.4.2 平面展开:通过文档元素直接创建
12.4.3 回收空间:删除不用的节点
12.5 访问和操纵 DOM节点
12.5.1 打开每一个盒子:遍历节点
12.5.2 弄清层级关系:父子与兄弟
12.5.3 搜索特定节点
12.5.4 克隆节点
12.5.5 移动节点
12.5.6 小技巧
12.6 读写数据
12.6.1 添加、修改和删除属性
12.7 外观与行为
12.7.1 DOM样式属性
12.7.2 显示与隐藏
12.7.3 改变颜色和大小
12.7.4 改变位置
12.7.5 编辑控制
12.7.6 改变样式
12.8 XML DOM
12.8.1 什么是XML DOM
12.8.2 如何使用XML DOM
12.9 总结
第十三章 事件处理
13.1 什么是事件
13.1.1 消息与事件响应
13.1.2 浏览器的事件驱动机制
13.2 基本事件处理
13.2.1 事件和事件类型
13.2.2 事件的绑定
13.2.3 直接调用事件处理函数
13.2.4 事件处理函数的返回值..
13.2.5 带参数的事件响应
13.2.6 “this”关键字
13.3 标准事件模型
13.3.1 起泡和捕捉:浏览器的事件传播
13.3.2 事件处理函数的注册
13.3.3 把对象注册为事件处理程序
13.3.4 事件模块和事件类型
13.3.5 Event接口
13.3.5.1 Event接口
13.3.5.2 UIEvent接口
13.3.5.3 MouseEvent接口
13.3.5.4 MutationEvent接口
13.3.6 混合事件模型
13.3.7 合成事件
13.4 浏览器的事件处理模型实现
13.4.1 Internet Explorer 事件模型
13.4.1.1 IE事件注册
13.4.1.2 IE Event对象
13.4.1.3 IE中的事件起泡
13.4.2 Netscape 4 事件模型
13.4.2.1 Netscape 4中的事件捕捉
13.4.2.2 Netscape 4 Event对象
13.5 回调与用户自定义事件
13.5.1 事件处理模式
13.5.2 用户事件接口的定义
13.5.3 事件代理和事件注册
13.5.4 标准模式:事件分派和接收
13.6 一个例子——增强数据表格
13.6.1 什么是增强数据表格
13.6.2 固定表头
13.6.3 可变列宽
13.6.4 标记列
13.6.5 小技巧:将代码添加到样式表
13.7 总结
第十四章 级联样式表
14.1 什么是级联样式表
14.1.1 CSS样式和样式表
14.1.2 CSS的标准化
14.1.3 浏览器支持的CSS
14.2 JavaScript与CSS
14.2.1 CSS和DOM
14.2.2 CSS和IE
14.2.3 浏览器的CSS兼容性
14.3 总结
第十五章 脚本化数据存储
15.1 什么是cookie
15.1.1 浏览器和客户端cookie
15.1.2 cookie的属性
15.2 cookie的客户端存取
15.2.1 cookie的存储
15.2.2 cookie的读取
15.3 cookie的限制
15.4 cookie示例
15.5 cookie对象封装
15.5 什么是userData
15.5.1 浏览器和客户端userData
15.5.2 userData的声明
15.5.3 userData的属性和方法
15.6 userData的客户端存取
15.6.1 userData的存储和读取
15.6.2 userData的安全性
15.7 userData的限制
15.8 userData与cookie的对比
15.9 userData示例
15.10 总结
第四部分 数据交互
第十六章 同步和异步
16.1 什么是同步和异步
16.2 超时设定和时间间隔
16.3 定时器使用——侦听与拦截
16.3.1 标准模式:监视器
16.3.2 应当注意的问题
16.4 一个例子——漂亮的Web时钟
16.4.1 什么是Web时钟?
16.4.2 最简单的Web时钟
16.4.3 Web时钟的设计
16.4.4 完整的Web时钟源代码
16.5 总结
第十七章 XML DOM和XML HTTP
17.1 什么是XML DOM对象
17.1.1 XML DOM简介
17.1.2 浏览器支持的XML DOM接口
17.1.2.1 XML DOM 标准接口
17.1.2.1 IE的XML DOM 组件
17.1.2.3 操作XML文档
17.2 XMLDOM的版本兼容性
17.2.1 XMLDOM的跨浏览器应用
17.3 错误处理
17.3.1 ParseError对象
17.3.2 包含错误信息的文档
17.4 XML DOM操作XML文档
17.4.1 访问节点
17.4.2 创建新节点
17.4.3 移动和修改节点
17.4.4 读写节点属性和读写数据
17.4.5 保存文档
17.5 一个例子——JavaScript棋谱阅读器(二)
17.5.1 用XML描述棋谱
17.5.2 将XML棋谱转换为SGF棋谱
17.6 什么是XML HTTP对象
17.6.1 XML HTTP 对象简介
17.6.2 浏览器支持的XML HTTP对象
17.7 发送请求
17.7.1 建立连接
17.7.2 发送请求
17.8 读取和设定HTTP头
17.8.1 什么是HTTP头
17.9 服务器应答
17.9.1 同步和异步应答
17.9.2 ResponseText 和ResponseXML
17.10 总结
第十八章 Ajax简介
18.1 什么是Ajax
18.1.1 Ajax并不神秘
18.1.2 Ajax的应用场景
18.1.3 Ajax的竞争对手:其他替代技术
18.2 Ajax初探:我的第一个Ajax程序
18.2.1 从常规应用开始
18.2.2 讨厌的页面刷新
18.2.3 无刷新解决方案
18.2.4 异步工作
18.3 Ajax原理剖析
18.3.1 XmlHttp实时通信
18.3.2 数据动态显示
18.3.3 发挥XML的能力
18.3.4 JavaScript绑定一切
18.3.5 应用背后的标准
18.4 Ajax范例——实时聊天工具
18.4.1 什么是实时聊天工具
18.4.2 需求分析:实时聊天功能的实现要点
18.4.3 系统实现:实时聊天功能的实现
18.4.4 小结
18.5 总结
第十九章 标准和兼容性
19.1 标准化组织
19.1.1 W3C和 DOM标准
19.1.2 ECMA 和 JavaScript标准
19.1.3 互联网标准
19.2 平台和浏览器的兼容性
19.2.1 最小公分母法
19.2.2 防御性编码
19.2.3 客户端探测器
19.2.4 特性检测
19.2.5 实现标准
19.3 语言版本的兼容性
19.3.1 language属性
19.3.2 版本测试
19.4 如何实现跨浏览器应用
19.4.1 取舍:划定支持范围
19.4.2 基础模块设计:独立兼容性检测
19.4.3 划分运行级别
19.4.4 给出正确的信息
19.4.5 充分的应用测试
19.4.6 靠近标准和就近原则
19.5 展望未来
19.6 总结
第二十章 信息安全
20.1 用户的隐私信息
20.1.1 Web应用中的隐私信息
20.2 禁止和受限制的操作
20.2.1 受限制的属性
20.2.2 受限制的操作
20.2.3 脚本安全级别
20.2.4 脚本调试
20.3 警惕幕后的攻击者
20.3.1 攻击的手段
20.3.2 隐匿的数据流
20.3.3 页面伪装
20.3.4 发现蛛丝马迹
20.3.5 防范的手段
20.3.5.1 传输数据的加密
20.3.5.2 对用户隐藏源代码
20.4 同源策略
20.4.1 什么是同源策略
20.4.2 同源策略的利弊
20.4.3 突破同源策略
20.5 安全区和签名脚本
20.5.1 可配置的安全策略方案
20.5.2 Internet Explorer的安全区
20.5.3 Netscape的签名脚本
20.6 代码本身的安全:加密和混淆
20.6.1 为什么要加密和混淆
20.6.2 客户端的加密技术
20.6.3 代码混淆原理
20.6.4 JavaScript代码混淆工具
20.6.5 加密和混淆的结合使用
20.7 总结
第五部分 超越JavaScript
第二十一章 面向对象
21.1 什么是面向对象
21.1.1 类和对象
21.1.2 公有和私有:属性的封装
21.1.3 属性和方法的类型
21.2 神秘的prototype
21.2.1 什么是prototype
21.2.2 prototype使用技巧
21.2.3 prototype的实质
21.2.4 prototype的价值与局限性
21.3 继承与多态
21.3.1 什么是继承
21.3.2 实现继承的方法
21.3.2.1 构造继承法
21.3.2.2 原型继承法
21.3.2.3 实例继承法
21.3.2.4 拷贝继承法
21.3.2.5 几种继承法的比较
21.3.2.6 混合继承
21.3.3 单继承与多重继承
21.3.4 接口
21.3.5 多态
21.4 构造与析构
21.4.1 构造函数
21.4.2 多重构造
21.4.3 析构
21.5 疑团!“this”迷宫
21.5.1 无数个陷阱:令人困扰的“this”谜团
21.5.2 偷梁换柱:不好的使用习惯
21.5.3 异步调用:谁动了我的“this”
21.5.4 揭开真相:JavaScript的“this”本质
21.5.5 困难不再:利用闭包修正“this”引用
21.6 包装对象
21.6.1 区分值和引用
21.6.2 装箱与拆箱
21.7 元类,类的模板
21.7.1 什么是元类
21.7.2 元类:构造类的类
21.7.3 为什么要用元类
21.7.4 类工厂
21.7.4.1 什么是类工厂
21.7.4.2 为什么要建立类工厂
21.8 谁才是造物主
21.8.1 万物适用的准则
21.8.2 抽象的极致
21.8.3 返璞归真,同源架构
21.9 总结
第二十二章 闭包与函数式编程
22.1 动态语言与闭包
22.1.1 动态语言
22.1.2 语法域和执行域
22.1.2 JavaScript的闭包
22.2 闭包的特点与形式
22.2.1 闭包的内在:自治的领域
22.2.2 访问外部环境
22.2.3 闭包和面向对象
22.2.4 其他形式的闭包
22.3 闭包使用的注意事项
22.3.1 不适合使用闭包的场合
22.4 函数式编程
22.4.1 什么是函数式编程
22.4.1.1 函数是第一型
22.4.1.2 闭包与函数式编程
22.4.1.3 科里化(Currying)
22.4.1.4 延迟求值和延续
22.4.3 函数式编程的优点
22.4.3.1 单元测试
22.4.3.2 调试
22.4.3.3 并行
22.4.3.4 代码热部署
22.4.3.5 机器辅助的推理和优化
22.4.4 函数式编程的缺点
22.4.4.1 闭包的副作用
22.4.4.2 递归的形式
22.4.4.3 延迟求值的副作用
22.5 闭包与面向对象
22.5.1 私有域
22.5.2 名字空间管理
22.5.3 友元
22.6 Python风格
22.6.1 最简约代码
22.6.2 轻量级重用
22.6.2.1 JSON
22.6.2.2 Functional
22.6.2.3 迭代函数
22.6.3 模块管理
22.7 总结
第二十三章 模块级管理
23.1 模块化管理
23.1.1 模块化:代码的重用
23.1.2 JavaScript的模块管理
23.2 开放封闭原则和面向接口
23.2.1 开放封闭原则
23.2.2 面向接口
23.3 名字空间管理
23.3.1 什么是名字空间
23.3.2 为什么要用名字空间
23.3.3 JavaScript的名字空间管理
23.4 调用依赖
23.4.1 模块的依赖性
23.4.2 模块依赖的管理
23.5 用代码管理代码
23.5.1 运行时环境的管理
23.5.2 托管代码
23.5.3 完整的代码管理容器
23.6 总结
第二十四章 动态构建
24.1 让代码去写代码
24.1.1 脚本的动态解析
24.1.2 语法扩展:创造属于自己的语言
24.2 “发明”语法
24.2.1 正则表达式和语法解析
24.2.2 一个简单的语法解析器实现
24.2.2.1 什么是JavaScript 2.0语法
24.2.2.2 JavaScript 2.0语法的部分关键特性实现
24.3 实现自己的方言——LispScript
24.3.1 从JavaScript到Lisp
24.3.2 最初的工作
24.3.3 公理,表达式
24.3.4 七条基本公设
24.3.4.1 “引用”公设
24.3.4.2 “原子”公设
24.3.4.3 “等值”公设
24.3.4.4 “表头”公设
24.3.4.5 “余表”公设
24.3.4.6 “和表”公设
24.3.4.7 “条件”公设
24.3.5 函数文法
24.3.6 定义新函数
24.3.7 一个惊喜——_eval
24.3.8 其他的扩展
24.3.9 小结
24.3.10 运行环境和代码容器
24.4 总结
第二十五章 执行效率
25.1 为什么要讨论执行效率
25.1.1 来自客户的抱怨:JavaScript能有多慢
25.1.2 代码慢下来是谁的错
25.2 封闭的代价
25.2.1 过度封装的性能问题
25.2.2 信息隐藏的利弊
25.2.3 构造对象的开销
25.3 盒子里的流火
25.3.1 DOM的内存开销
25.3.2 浏览器的内存管理
25.3.3 看清一个事实:内存泄漏的存在
25.3.4 注意:及时关闭你的“盒子”
25.3.5 一些误会的澄清
25.3.5.1 脚本动态创建DOM导致内存泄漏
25.3.5.2 闭包导致内存泄漏
25.4 动态:魔鬼与天使
25.4.1 动态解析的性能分析
25.4.2 开发效率与执行效率:永远的困难选择
25.4.3 优美与适用:学会经受魔鬼的诱惑
25.4.4 扮演客户眼中的天使
25.5 让代码轻舞飞扬
25.5.1 简单就是美:为代码瘦身
25.5.2 最完美的运用是不用
25.5.3 高度抽象是为了简化问题
25.5.4 逻辑和表达同样重要
25.5.5 保持代码的严谨
25.5.6 漂亮的书写风格:让阅读者心情愉快
25.6 总结
第二十六章 应用框架
26.1 应用框架概览
26.1.1 什么是应用框架
26.1.2 应用框架的组成部分
26.1.2.1 类库
26.1.2.2 核心模块
26.1.2.3 环境配置
26.1.2.4 使用手册
26.2 为什么要设计应用框架
26.2.1 应用框架的适用范围
26.2.2 应用框架的利弊
26.3 如何设计应用框架
26.3.1 把握设计的目标
26.3.2 应用框架的设计准则
26.3.3 什么样的应用框架才是成熟的应用框架
26.3.4 应用框架的设计方法
*26.3.5 实战!设计一个简单的应用框架
26.3.5.1 自描述
26.3.5.2 基础接口和语义型代码
26.3.5.3 核心对象的原型扩展
26.3.5.4 简单方法
26.3.5.5 名字空间
26.3.5.6 支持标准和跨浏览器
26.3.5.7 事件模型
26.3.5.8 应用模式
26.3.5.9 Ajax
26.3.5.10 内存管理和其他
26.4 框架的实际应用
26.5 已存在的应用框架
26.5.1 Prototype
26.5.2 JQuery
26.5.3 Dojo
26.5.4 JSVM2
26.5.5 其他框架
26.5.5.1 Bindows (成立于2003年)
26.5.5.2 BackBase (成立于2003年)
26.5.5.3 DOJO (开发中,成立于2004年9月)
26.5.5.4 Open Rico (开发中,成立于2005年5月,基于早期的一个proprietary 框架)
26.5.5.5 qooxdoo (开发中;成立于2005年5月)
26.5.5.6 Tibet (开发中,创建于2005年6月)
26.5.5.7 AJFORM (创建于2005年6月)
26.6 总结...
月影
无封面