- 浏览: 578480 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
小网客:
噱头 没实际意义
【互动出版网】11.11购物狂欢节重磅大促,免费领万千优惠券 -
tongchuang123:
这是要出书了吗:o
微信控 控微信 -
韶华无限:
这也可以出本书……
玩转微信(彩印) -
zhukewen_java:
无语了。。。哪天出本《玩转QQ》?
玩转微信(彩印) -
yaying:
我只见过MySQL Cookbook中文版
jQuery Cookbook中文版
JavaScript语言精髓与编程实践(第2版)
编辑推荐
以JavaScript视角看整个计算机语言的世界,小角度引来的大话题
基本信息
- 作者: 周爱民
- 出版社:电子工业出版社
- ISBN:9787121156403
- 上架时间:2012-3-19
- 出版日期:2012 年3月
- 页码:454
- 定价 :¥79.00
- 会员价 : ¥57.67(73折)
- 校园优惠价 :¥57.67(73折)
http://product.china-pub.com/199103&iteyeblog
内容简介
<!--更改-->
《javascript语言精髓与编程实践(第2版)》详细讲述javascript 作为一种混合式语言的各方面特性,包括过程式、面向对象、函数式和动态语言特性等,在动态函数式语言特性方面有着尤为细致的讲述。本书的主要努力之一,就是分解出这些语言原子,并重现将它们混合在一起的过程与方法。通过从复杂性到单一语言特性的还原过程,读者可了解到语言的本质,以及“层出不穷的语言特性”背后的真相。
《javascript语言精髓与编程实践(第2版)》主要的著述目的是基于一种形式上简单的语言来讲述“语言的本质及其应用”。本书详细讲述了通过框架执行过程来构造一个javascript 扩展框架的方法,并完整地讲述了框架扩展中各种设计取舍,因此可以作为研究计算机程序设计语言时的参考,用以展示现实系统如何实现经典理论中的各种编程范型。
目录
《javascript语言精髓与编程实践(第2版)》
第1部分 语言基础
第1章 十年javascript 3
1.1 网页中的代码 3
1.1.1 新鲜的玩意儿 3
1.1.2 第一段在网页中的代码 4
1.1.3 最初的价值 5
1.2 用javascript来写浏览器上的应用 7
1.2.1 我要做一个聊天室 7
1.2.2 flash的一席之地 9
1.2.3 rwc与ria之争 10
1.3 没有框架与库的语言能怎样发展呢 12
1.3.1 做一个框架 12
1.3.2 重写框架的语言层 15
1.3.3 富浏览器端开发与ajax 16
1.4 语言的进化 18
1.4.1 qomo的重生 18
1.4.2 qobean是对语言的重新组织 18
1.4.3 javascript作为一门语言的进化 19
1.5 为javascript正名 22
第1部分 语言基础
第1章 十年javascript 3
1.1 网页中的代码 3
1.1.1 新鲜的玩意儿 3
1.1.2 第一段在网页中的代码 4
1.1.3 最初的价值 5
1.2 用javascript来写浏览器上的应用 7
1.2.1 我要做一个聊天室 7
1.2.2 flash的一席之地 9
1.2.3 rwc与ria之争 10
1.3 没有框架与库的语言能怎样发展呢 12
1.3.1 做一个框架 12
1.3.2 重写框架的语言层 15
1.3.3 富浏览器端开发与ajax 16
1.4 语言的进化 18
1.4.1 qomo的重生 18
1.4.2 qobean是对语言的重新组织 18
1.4.3 javascript作为一门语言的进化 19
1.5 为javascript正名 22
.1.5.1 javascript 22
1.5.2 core javascript 23
1.5.3 spidermonkey javascript 24
1.5.4 ecmascript 24
1.5.5 jscript 25
1.5.6 总述 25
1.6 javascript的应用环境 26
1.6.1 宿主环境 27
1.6.2 外壳程序 28
1.6.3 运行期环境 29
第2章 javascript的语法 31
2.1 语法综述 31
2.1.1 标识符所绑定的语义 32
2.1.2 识别语法错误与运行错误 33
2.2 javascript的语法:变量声明 33
2.2.1 变量的数据类型 34
2.2.1.1 基本数据类型 34
2.2.1.2 值类型与引用类型 35
2.2.2 变量声明 36
2.2.3 变量与直接量 37
2.2.3.1 字符串直接量、转义符 38
2.2.3.2 数值直接量 40
2.2.4 函数声明 41
2.3 javascript的语法:表达式运算 42
2.3.1 一般表达式运算 43
2.3.2 逻辑运算 44
2.3.3 字符串运算 45
2.3.4 比较运算 46
2.3.4.1 等值检测 46
2.3.4.2 序列检测 48
2.3.5 赋值运算 50
2.3.6 函数调用 51
2.3.7 特殊作用的运算符 51
2.3.8 运算优先级 53
2.4 javascript的语法:语句 55
2.4.1 表达式语句 56
2.4.1.1 一般表达式语句 57
2.4.1.2 赋值语句与隐式的变量声明 59
2.4.1.3 (显式的)变量声明语句 59
2.4.1.4 函数调用语句 61
2.4.2 分支语句 65
2.4.2.1 条件分支语句(if语句) 65
2.4.2.2 多重分支语句(switch语句) 66
2.4.3 循环语句 68
2.4.4 流程控制:一般子句 70
2.4.4.1 标签声明 70
2.4.4.2 break子句 71
2.4.4.3 continue子句 73
2.4.4.4 return子句 75
2.4.5 流程控制:异常 75
2.5 面向对象编程的语法概要 77
2.5.1 对象直接量声明与实例创建 78
2.5.1.1 使用构造器创建对象实例 78
2.5.1.2 对象直接量声明 81
2.5.1.3 数组直接量声明 82
2.5.1.4 正则表达式直接量声明 83
2.5.1.5 【es5】在对象直接量中使用属性读写器 85
2.5.1.6 讨论:初始器与直接量的区别 86
2.5.2 对象成员 87
2.5.2.1 对象成员列举、存取和删除 87
2.5.2.2 属性存取与方法调用 91
2.5.2.3 对象及其成员的检查 92
2.5.2.4 可列举性 94
2.5.3 默认对象的指定 95
2.6 【es5】严格模式下的语法限制 96
2.6.1 语法限制 97
2.6.2 严格模式的范围 99
2.7 运算符的二义性 100
2.7.1 加号“+”的二义性 102
2.7.2 括号“( )”的二义性 103
2.7.3 冒号“:”与标签的二义性 105
2.7.4 大括号“{ }”的二义性 106
2.7.5 逗号“,”的二义性 109
2.7.6 方括号“[ ]”的二义性 111
第2部分 语言特性及基本应用
第3章 javascript的非函数式语言特性 117
3.1 概述 117
3.1.1 命令式语言与结构化编程 118
3.1.2 结构化的疑难 120
3.1.3 “面向对象语言”是突破吗 122
3.1.4 更高层次的抽象:接口 125
3.1.5 再论语言的分类 127
3.1.6 javascript的语源 129
3.2 基本语法的结构化含义 131
3.2.1 基本逻辑与代码分块 131
3.2.2 模块化的层次:语法作用域 134
3.2.2.1 主要的语法作用域及其效果 135
3.2.2.2 语法作用域之间的相关性 138
3.2.3 执行流程及其变更 139
3.2.3.1 级别2:“break <label>”等语法 140
3.2.3.2 级别3:return子句 143
3.2.3.3 级别4:throw语句 144
3.2.3.4 执行流程变更的内涵 145
3.2.4 模块化的效果:变量作用域 147
3.2.4.1 级别1:表达式 148
3.2.4.2 级别2:语句 149
3.2.4.3 级别3:函数(局部) 150
3.2.4.4 级别4:全局 151
3.2.4.5 变量作用域中的次序问题 153
3.2.4.6 变量作用域与变量的生存周期 154
3.2.5 语句的副作用 155
3.3 javascript中的原型继承 157
3.3.1 空对象(null)与空的对象 158
3.3.2 原型继承的基本性质 159
3.3.3 空的对象是所有对象的基础 159
3.3.4 构造复制?写时复制?还是读遍历? 160
3.3.5 构造过程:从函数到构造器 162
3.3.6 预定义属性与方法 163
3.3.7 原型链的维护 165
3.3.7.1 两个原型链 165
3.3.7.2 constructor属性的维护 167
3.3.7.3 内部原型链的作用 170
3.3.7.4 【es5】在spidermonkey与es5中的原型链维护 170
3.3.8 原型继承的实质 172
3.3.8.1 原型修改 172
3.3.8.2 原型继承 173
3.3.8.3 原型继承的实质:从无到有 174
3.3.8.4 如何理解“继承来的成员” 175
3.4 javascript的对象系统 177
3.4.1 封装 177
3.4.2 多态 179
3.4.3 事件 181
3.4.4 类抄写?或原型继承? 182
3.4.4.1 类抄写 183
3.4.4.2 原型继承存在的问题 186
3.4.4.3 如何选择继承的方式 186
3.4.5 javascript中的对象(构造器) 187
3.4.6 不能通过继承得到的效果 190
3.5 【es5】可定制的对象属性 192
3.5.1 属性描述符 192
3.5.1.1 (一般的)数据属性描述符 193
3.5.1.2 (带读写器的)存取属性描述符 193
3.5.1.3 直接量形式的初始器是语法格式,而非描述符 194
3.5.2 定制对象属性 195
3.5.2.1 属性声明以及获取属性描述符 195
3.5.2.2 新的对象创建方法:object.create() 197
3.5.3 属性状态维护 198
3.5.3.1 取属性列表 198
3.5.3.2 使用defineproperty来维护属性的性质 199
3.5.3.3 对于继承自原型的属性,修改其值的效果 200
3.5.3.4 重写原型继承来的属性的描述符 201
第4章 javascript的函数式语言特性 203
4.1 概述 203
4.1.1 从代码风格说起 204
4.1.2 为什么常见的语言不赞同连续求值 204
4.1.3 函数式语言的渊源 206
4.2 函数式语言中的函数 208
4.2.1 函数是运算元 208
4.2.2 在函数内保存数据 209
4.2.3 函数内的运算对函数外无副作用 210
4.3 从运算式语言到函数式语言 211
4.3.1 javascript中的几种连续运算 212
4.3.1.1 连续赋值 212
4.3.1.2 三元表达式的连用 212
4.3.1.3 一些运算连用 214
4.3.1.4 函数与方法的调用 214
4.3.2 运算式语言 216
4.3.2.1 运算的实质是值运算 216
4.3.2.2 有趣的运算:在ie和j2ee中 218
4.3.3 如何消灭掉语句 220
4.3.3.1 通过表达式消灭分支语句 221
4.3.3.2 通过函数递归消灭循环语句 222
4.3.3.3 其他可以被消灭的语句 223
4.4 函数:对运算式语言的补充和组织 224
4.4.1 函数是必要的补充 224
4.4.2 函数是代码的组织形式 226
4.4.3 重新认识“函数” 227
4.4.3.1 “函数”==“lambda” 228
4.4.3.2 当运算符等义于某个函数时 228
4.4.4 javascript语言中的函数式编程 230
4.5 javascript中的函数 231
4.5.1 可变参数与值参数传递 231
4.5.2 非惰性求值 235
4.5.3 函数是第一型 237
4.5.4 函数是一个值 239
4.5.5 可遍历的调用栈 239
4.5.5.1 callee:我是谁 240
4.5.5.2 caller:谁呼(叫)我 242
4.6 闭包 244
4.6.1 闭包与函数实例 244
4.6.1.1 什么是闭包 245
4.6.1.2 什么是函数实例与函数引用 246
4.6.1.3 (在被调用时,)每个函数实例至少拥有一个闭包 248
4.6.2 闭包与调用对象 250
4.6.2.1 “调用对象”的局部变量维护规则 252
4.6.2.2 “全局对象”的变量维护规则 252
4.6.2.3 函数闭包与“调用对象”的生存周期 253
4.6.3 闭包相关的一些特性 255
4.6.3.1 引用与泄漏 256
4.6.3.2 函数实例拥有多个闭包的情况 258
4.6.3.3 语句或语句块中的闭包问题 260
4.6.3.4 闭包中的标识符(变量)特例 262
4.6.3.5 函数对象的闭包及其效果 265
4.6.4 闭包与可见性 266
4.6.4.1 函数闭包带来的可见性效果 266
4.6.4.2 对象闭包带来的可见性效果 269
4.6.4.3 匿名函数的闭包与可见性效果 273
4.7 【es5】严格模式与闭包 274
4.7.1 严格模式下的执行限制 275
4.7.2 严格模式下的匿名函数递归问题 276
第5章 javascript的动态语言特性 279
5.1 概述 279
5.1.1 动态数据类型的起源 280
5.1.2 动态执行系统的起源 280
5.1.2.1 编译系统、解释系统与编码 280
5.1.2.2 动态执行 281
5.1.3 脚本系统的起源 282
5.1.4 脚本只是一种表面的表现形式 283
5.2 动态执行 285
5.2.1 动态执行与闭包 285
5.2.1.1 eval使用全局闭包 286
5.2.1.2 eval使用当前函数的闭包 287
5.2.2 动态执行过程中的语句、表达式与值 289
5.2.3 奇特的、甚至是负面的影响 291
5.3 动态方法调用(call、apply与bind) 293
5.3.1 动态方法调用中指定this对象 293
5.3.2 丢失的this引用 295
5.3.3 栈的可见与修改 296
5.3.4 兼容性:低版本中的call()与apply() 298
5.3.5 【es5】兼容性:es5中的call()、apply() 301
5.3.6 【es5】bind()方法与函数的延迟调用 302
5.4 重写 303
5.4.1 原型重写 304
5.4.2 构造器重写 305
5.4.2.1 语法声明与语句含义不一致的问题 307
5.4.2.2 对象检测的麻烦 310
5.4.2.3 构造器的原型(prototype属性)不受重写影响 311
5.4.2.4 “内部对象系统”不受影响 312
5.4.2.5 让用户对象系统影响内部对象系统 313
5.4.2.6 构造器重写对直接量声明的影响 314
5.4.2.7 构造绑定 315
5.4.2.8 内置构造器重写的概述 317
5.4.3 对象成员的重写 318
5.4.3.1 成员重写的检测 318
5.4.3.2 成员重写的删除 319
5.4.4 宿主对重写的限制 321
5.4.5 引擎对重写的限制 323
5.4.5.1 this的重写 323
5.4.5.2 语句语法中的重写 324
5.4.5.3 结构化异常处理中的重写 326
5.5 包装类:面向对象的妥协 327
5.5.1 显式包装元数据 328
5.5.2 隐式包装的过程与检测方法 329
5.5.3 包装值类型数据的必要性与问题 332
5.5.4 其他直接量与相应的构造器 333
5.5.4.1 函数特例 333
5.5.4.2 正则表达式特例 334
5.6 关联数组:对象与数组的动态特性 335
5.6.1 关联数组是对象系统的基础 336
5.6.2 用关联数组实现的索引数组 336
5.6.3 干净的对象 339
5.7 类型转换 342
5.7.1 宿主环境下的特殊类型系统 343
5.7.2 值运算:类型转换的基础 345
5.7.3 隐式转换 346
5.7.3.1 运算导致的类型转换 346
5.7.3.2 语句(语义)导致的类型转换 348
5.7.4 值类型之间的转换 348
5.7.4.1 undefined的转换 349
5.7.4.2 number的转换 349
5.7.4.3 boolean的转换 350
5.7.4.4 string的转换 351
5.7.4.5 值类型数据的显式转换 351
5.7.5 从引用到值:深入探究valueof()方法 353
5.7.6 到字符串类型的显式转换 355
5.7.6.1 重写tostring()方法 356
5.7.6.2 从数值到字符串的显式转换 357
5.7.6.3 其他类型的显式转换 358
5.7.6.4 序列化 358
第3部分 编程实践
第6章 元语言:qobean核心技术与实现 363
6.1 qobean语言层的基本特性 363
6.1.1 qobean语言层概要 363
6.1.1.1 如何使用qobean 364
6.1.1.2 qobean中的面向对象(oop) 365
6.1.1.3 qobean中的接口(interface) 367
6.1.1.4 qobean中的切面(aspect) 369
6.1.2 qomo的体系结构及其与qobean的关系 373
6.2 qobean的元语言特性 374
6.2.1 qobean如何理解元语言 374
6.2.2 算法与数据结构 375
6.2.2.1 引用类型与值类型的数据 376
6.2.2.2 函数调用 376
6.2.2.3 源起 377
6.2.2.4 小结 377
6.2.3 代码组织形式 379
6.2.3.1 块,以及基于块的编织 379
6.2.3.2 更强的编织 381
6.2.3.3 逻辑代码块:局部、全局,以及闭包 382
6.2.3.4 逻辑的属主 384
6.2.4 对“如何组织对象”的补充 385
6.2.4.1 原子,与原子联结的友类、友函数 386
6.2.4.2 对象唯一化 387
6.2.5 综述 390
6.3 基于元语言实现的语言特性 391
6.3.1 基于元语言的类继承框架 391
6.3.1.1 类注册过程 392
6.3.1.2 示例:实现metaclass与metaobject的约定 393
6.3.1.3 完整的qomo语法实现 396
6.3.1.4 类类型树的建立 400
6.3.2 多投事件 401
6.3.3 其他语言特性的实现 403
6.4 基于元语言实现的dsl 405
6.4.1 dsl的基本设计 405
6.4.2 dsl的基本实现 406
6.4.3 dsl的基本应用 409
6.4.4 一些修补 410
6.4.5 基于严格模式的一些修补 412
第7章 一般性的动态函数式语言技巧 415
7.1 消除代码的全局变量名占用 415
7.2 一次性的构造器 417
7.3 对象充当识别器 418
7.4 识别new运算进行的构造器调用 420
7.5 使用直接量及其包装类快速调用对象方法 421
7.6 三天前是星期几 422
7.7 使用对象的值含义来构造复杂对象 423
7.8 控制字符串替换过程的基本模式 426
7.9 实现二叉树 427
7.10 将函数封装为方法 429
7.11 使用with语句来替代函数参数传递 431
7.12 使用对象闭包来重置重写 432
7.13 构造函数参数 434
7.14 使用更复杂的表达式来消减if语句 437
7.15 利用钩子函数来扩展功能 439
7.16 安全的字符串 441
附录a 术语表 443
附录b 主要引擎的特性差异列表 447
附录c 附图 449
附录d 参考书目 453
附录e 本书各版次主要修改 455
1.5.2 core javascript 23
1.5.3 spidermonkey javascript 24
1.5.4 ecmascript 24
1.5.5 jscript 25
1.5.6 总述 25
1.6 javascript的应用环境 26
1.6.1 宿主环境 27
1.6.2 外壳程序 28
1.6.3 运行期环境 29
第2章 javascript的语法 31
2.1 语法综述 31
2.1.1 标识符所绑定的语义 32
2.1.2 识别语法错误与运行错误 33
2.2 javascript的语法:变量声明 33
2.2.1 变量的数据类型 34
2.2.1.1 基本数据类型 34
2.2.1.2 值类型与引用类型 35
2.2.2 变量声明 36
2.2.3 变量与直接量 37
2.2.3.1 字符串直接量、转义符 38
2.2.3.2 数值直接量 40
2.2.4 函数声明 41
2.3 javascript的语法:表达式运算 42
2.3.1 一般表达式运算 43
2.3.2 逻辑运算 44
2.3.3 字符串运算 45
2.3.4 比较运算 46
2.3.4.1 等值检测 46
2.3.4.2 序列检测 48
2.3.5 赋值运算 50
2.3.6 函数调用 51
2.3.7 特殊作用的运算符 51
2.3.8 运算优先级 53
2.4 javascript的语法:语句 55
2.4.1 表达式语句 56
2.4.1.1 一般表达式语句 57
2.4.1.2 赋值语句与隐式的变量声明 59
2.4.1.3 (显式的)变量声明语句 59
2.4.1.4 函数调用语句 61
2.4.2 分支语句 65
2.4.2.1 条件分支语句(if语句) 65
2.4.2.2 多重分支语句(switch语句) 66
2.4.3 循环语句 68
2.4.4 流程控制:一般子句 70
2.4.4.1 标签声明 70
2.4.4.2 break子句 71
2.4.4.3 continue子句 73
2.4.4.4 return子句 75
2.4.5 流程控制:异常 75
2.5 面向对象编程的语法概要 77
2.5.1 对象直接量声明与实例创建 78
2.5.1.1 使用构造器创建对象实例 78
2.5.1.2 对象直接量声明 81
2.5.1.3 数组直接量声明 82
2.5.1.4 正则表达式直接量声明 83
2.5.1.5 【es5】在对象直接量中使用属性读写器 85
2.5.1.6 讨论:初始器与直接量的区别 86
2.5.2 对象成员 87
2.5.2.1 对象成员列举、存取和删除 87
2.5.2.2 属性存取与方法调用 91
2.5.2.3 对象及其成员的检查 92
2.5.2.4 可列举性 94
2.5.3 默认对象的指定 95
2.6 【es5】严格模式下的语法限制 96
2.6.1 语法限制 97
2.6.2 严格模式的范围 99
2.7 运算符的二义性 100
2.7.1 加号“+”的二义性 102
2.7.2 括号“( )”的二义性 103
2.7.3 冒号“:”与标签的二义性 105
2.7.4 大括号“{ }”的二义性 106
2.7.5 逗号“,”的二义性 109
2.7.6 方括号“[ ]”的二义性 111
第2部分 语言特性及基本应用
第3章 javascript的非函数式语言特性 117
3.1 概述 117
3.1.1 命令式语言与结构化编程 118
3.1.2 结构化的疑难 120
3.1.3 “面向对象语言”是突破吗 122
3.1.4 更高层次的抽象:接口 125
3.1.5 再论语言的分类 127
3.1.6 javascript的语源 129
3.2 基本语法的结构化含义 131
3.2.1 基本逻辑与代码分块 131
3.2.2 模块化的层次:语法作用域 134
3.2.2.1 主要的语法作用域及其效果 135
3.2.2.2 语法作用域之间的相关性 138
3.2.3 执行流程及其变更 139
3.2.3.1 级别2:“break <label>”等语法 140
3.2.3.2 级别3:return子句 143
3.2.3.3 级别4:throw语句 144
3.2.3.4 执行流程变更的内涵 145
3.2.4 模块化的效果:变量作用域 147
3.2.4.1 级别1:表达式 148
3.2.4.2 级别2:语句 149
3.2.4.3 级别3:函数(局部) 150
3.2.4.4 级别4:全局 151
3.2.4.5 变量作用域中的次序问题 153
3.2.4.6 变量作用域与变量的生存周期 154
3.2.5 语句的副作用 155
3.3 javascript中的原型继承 157
3.3.1 空对象(null)与空的对象 158
3.3.2 原型继承的基本性质 159
3.3.3 空的对象是所有对象的基础 159
3.3.4 构造复制?写时复制?还是读遍历? 160
3.3.5 构造过程:从函数到构造器 162
3.3.6 预定义属性与方法 163
3.3.7 原型链的维护 165
3.3.7.1 两个原型链 165
3.3.7.2 constructor属性的维护 167
3.3.7.3 内部原型链的作用 170
3.3.7.4 【es5】在spidermonkey与es5中的原型链维护 170
3.3.8 原型继承的实质 172
3.3.8.1 原型修改 172
3.3.8.2 原型继承 173
3.3.8.3 原型继承的实质:从无到有 174
3.3.8.4 如何理解“继承来的成员” 175
3.4 javascript的对象系统 177
3.4.1 封装 177
3.4.2 多态 179
3.4.3 事件 181
3.4.4 类抄写?或原型继承? 182
3.4.4.1 类抄写 183
3.4.4.2 原型继承存在的问题 186
3.4.4.3 如何选择继承的方式 186
3.4.5 javascript中的对象(构造器) 187
3.4.6 不能通过继承得到的效果 190
3.5 【es5】可定制的对象属性 192
3.5.1 属性描述符 192
3.5.1.1 (一般的)数据属性描述符 193
3.5.1.2 (带读写器的)存取属性描述符 193
3.5.1.3 直接量形式的初始器是语法格式,而非描述符 194
3.5.2 定制对象属性 195
3.5.2.1 属性声明以及获取属性描述符 195
3.5.2.2 新的对象创建方法:object.create() 197
3.5.3 属性状态维护 198
3.5.3.1 取属性列表 198
3.5.3.2 使用defineproperty来维护属性的性质 199
3.5.3.3 对于继承自原型的属性,修改其值的效果 200
3.5.3.4 重写原型继承来的属性的描述符 201
第4章 javascript的函数式语言特性 203
4.1 概述 203
4.1.1 从代码风格说起 204
4.1.2 为什么常见的语言不赞同连续求值 204
4.1.3 函数式语言的渊源 206
4.2 函数式语言中的函数 208
4.2.1 函数是运算元 208
4.2.2 在函数内保存数据 209
4.2.3 函数内的运算对函数外无副作用 210
4.3 从运算式语言到函数式语言 211
4.3.1 javascript中的几种连续运算 212
4.3.1.1 连续赋值 212
4.3.1.2 三元表达式的连用 212
4.3.1.3 一些运算连用 214
4.3.1.4 函数与方法的调用 214
4.3.2 运算式语言 216
4.3.2.1 运算的实质是值运算 216
4.3.2.2 有趣的运算:在ie和j2ee中 218
4.3.3 如何消灭掉语句 220
4.3.3.1 通过表达式消灭分支语句 221
4.3.3.2 通过函数递归消灭循环语句 222
4.3.3.3 其他可以被消灭的语句 223
4.4 函数:对运算式语言的补充和组织 224
4.4.1 函数是必要的补充 224
4.4.2 函数是代码的组织形式 226
4.4.3 重新认识“函数” 227
4.4.3.1 “函数”==“lambda” 228
4.4.3.2 当运算符等义于某个函数时 228
4.4.4 javascript语言中的函数式编程 230
4.5 javascript中的函数 231
4.5.1 可变参数与值参数传递 231
4.5.2 非惰性求值 235
4.5.3 函数是第一型 237
4.5.4 函数是一个值 239
4.5.5 可遍历的调用栈 239
4.5.5.1 callee:我是谁 240
4.5.5.2 caller:谁呼(叫)我 242
4.6 闭包 244
4.6.1 闭包与函数实例 244
4.6.1.1 什么是闭包 245
4.6.1.2 什么是函数实例与函数引用 246
4.6.1.3 (在被调用时,)每个函数实例至少拥有一个闭包 248
4.6.2 闭包与调用对象 250
4.6.2.1 “调用对象”的局部变量维护规则 252
4.6.2.2 “全局对象”的变量维护规则 252
4.6.2.3 函数闭包与“调用对象”的生存周期 253
4.6.3 闭包相关的一些特性 255
4.6.3.1 引用与泄漏 256
4.6.3.2 函数实例拥有多个闭包的情况 258
4.6.3.3 语句或语句块中的闭包问题 260
4.6.3.4 闭包中的标识符(变量)特例 262
4.6.3.5 函数对象的闭包及其效果 265
4.6.4 闭包与可见性 266
4.6.4.1 函数闭包带来的可见性效果 266
4.6.4.2 对象闭包带来的可见性效果 269
4.6.4.3 匿名函数的闭包与可见性效果 273
4.7 【es5】严格模式与闭包 274
4.7.1 严格模式下的执行限制 275
4.7.2 严格模式下的匿名函数递归问题 276
第5章 javascript的动态语言特性 279
5.1 概述 279
5.1.1 动态数据类型的起源 280
5.1.2 动态执行系统的起源 280
5.1.2.1 编译系统、解释系统与编码 280
5.1.2.2 动态执行 281
5.1.3 脚本系统的起源 282
5.1.4 脚本只是一种表面的表现形式 283
5.2 动态执行 285
5.2.1 动态执行与闭包 285
5.2.1.1 eval使用全局闭包 286
5.2.1.2 eval使用当前函数的闭包 287
5.2.2 动态执行过程中的语句、表达式与值 289
5.2.3 奇特的、甚至是负面的影响 291
5.3 动态方法调用(call、apply与bind) 293
5.3.1 动态方法调用中指定this对象 293
5.3.2 丢失的this引用 295
5.3.3 栈的可见与修改 296
5.3.4 兼容性:低版本中的call()与apply() 298
5.3.5 【es5】兼容性:es5中的call()、apply() 301
5.3.6 【es5】bind()方法与函数的延迟调用 302
5.4 重写 303
5.4.1 原型重写 304
5.4.2 构造器重写 305
5.4.2.1 语法声明与语句含义不一致的问题 307
5.4.2.2 对象检测的麻烦 310
5.4.2.3 构造器的原型(prototype属性)不受重写影响 311
5.4.2.4 “内部对象系统”不受影响 312
5.4.2.5 让用户对象系统影响内部对象系统 313
5.4.2.6 构造器重写对直接量声明的影响 314
5.4.2.7 构造绑定 315
5.4.2.8 内置构造器重写的概述 317
5.4.3 对象成员的重写 318
5.4.3.1 成员重写的检测 318
5.4.3.2 成员重写的删除 319
5.4.4 宿主对重写的限制 321
5.4.5 引擎对重写的限制 323
5.4.5.1 this的重写 323
5.4.5.2 语句语法中的重写 324
5.4.5.3 结构化异常处理中的重写 326
5.5 包装类:面向对象的妥协 327
5.5.1 显式包装元数据 328
5.5.2 隐式包装的过程与检测方法 329
5.5.3 包装值类型数据的必要性与问题 332
5.5.4 其他直接量与相应的构造器 333
5.5.4.1 函数特例 333
5.5.4.2 正则表达式特例 334
5.6 关联数组:对象与数组的动态特性 335
5.6.1 关联数组是对象系统的基础 336
5.6.2 用关联数组实现的索引数组 336
5.6.3 干净的对象 339
5.7 类型转换 342
5.7.1 宿主环境下的特殊类型系统 343
5.7.2 值运算:类型转换的基础 345
5.7.3 隐式转换 346
5.7.3.1 运算导致的类型转换 346
5.7.3.2 语句(语义)导致的类型转换 348
5.7.4 值类型之间的转换 348
5.7.4.1 undefined的转换 349
5.7.4.2 number的转换 349
5.7.4.3 boolean的转换 350
5.7.4.4 string的转换 351
5.7.4.5 值类型数据的显式转换 351
5.7.5 从引用到值:深入探究valueof()方法 353
5.7.6 到字符串类型的显式转换 355
5.7.6.1 重写tostring()方法 356
5.7.6.2 从数值到字符串的显式转换 357
5.7.6.3 其他类型的显式转换 358
5.7.6.4 序列化 358
第3部分 编程实践
第6章 元语言:qobean核心技术与实现 363
6.1 qobean语言层的基本特性 363
6.1.1 qobean语言层概要 363
6.1.1.1 如何使用qobean 364
6.1.1.2 qobean中的面向对象(oop) 365
6.1.1.3 qobean中的接口(interface) 367
6.1.1.4 qobean中的切面(aspect) 369
6.1.2 qomo的体系结构及其与qobean的关系 373
6.2 qobean的元语言特性 374
6.2.1 qobean如何理解元语言 374
6.2.2 算法与数据结构 375
6.2.2.1 引用类型与值类型的数据 376
6.2.2.2 函数调用 376
6.2.2.3 源起 377
6.2.2.4 小结 377
6.2.3 代码组织形式 379
6.2.3.1 块,以及基于块的编织 379
6.2.3.2 更强的编织 381
6.2.3.3 逻辑代码块:局部、全局,以及闭包 382
6.2.3.4 逻辑的属主 384
6.2.4 对“如何组织对象”的补充 385
6.2.4.1 原子,与原子联结的友类、友函数 386
6.2.4.2 对象唯一化 387
6.2.5 综述 390
6.3 基于元语言实现的语言特性 391
6.3.1 基于元语言的类继承框架 391
6.3.1.1 类注册过程 392
6.3.1.2 示例:实现metaclass与metaobject的约定 393
6.3.1.3 完整的qomo语法实现 396
6.3.1.4 类类型树的建立 400
6.3.2 多投事件 401
6.3.3 其他语言特性的实现 403
6.4 基于元语言实现的dsl 405
6.4.1 dsl的基本设计 405
6.4.2 dsl的基本实现 406
6.4.3 dsl的基本应用 409
6.4.4 一些修补 410
6.4.5 基于严格模式的一些修补 412
第7章 一般性的动态函数式语言技巧 415
7.1 消除代码的全局变量名占用 415
7.2 一次性的构造器 417
7.3 对象充当识别器 418
7.4 识别new运算进行的构造器调用 420
7.5 使用直接量及其包装类快速调用对象方法 421
7.6 三天前是星期几 422
7.7 使用对象的值含义来构造复杂对象 423
7.8 控制字符串替换过程的基本模式 426
7.9 实现二叉树 427
7.10 将函数封装为方法 429
7.11 使用with语句来替代函数参数传递 431
7.12 使用对象闭包来重置重写 432
7.13 构造函数参数 434
7.14 使用更复杂的表达式来消减if语句 437
7.15 利用钩子函数来扩展功能 439
7.16 安全的字符串 441
附录a 术语表 443
附录b 主要引擎的特性差异列表 447
附录c 附图 449
附录d 参考书目 453
附录e 本书各版次主要修改 455
发表评论
-
【互动出版网】2013双12全场科技类图书6.5折封顶
2013-12-12 16:30 1135【互动出版网】2013双12全场科技类图书6.5折封顶 ... -
C#编程兵书
2013-08-28 17:43 1198《C#编程兵书》 基本信息 作者: 张志强 胡君 丛书 ... -
C++编程兵书
2013-08-28 17:24 1216《C++编程兵书》 基本 ... -
HTML+CSS网站开发兵书
2013-08-28 17:04 1396《HTML+CSS网站开发兵书 ... -
Java编程兵书
2013-08-27 17:57 1224《Java编程兵书》 基本 ... -
网络运维与管理2013超值精华本
2013-08-27 17:44 1337《网络运维与管理2013超值精华本》 基本信息 作者: ... -
HTML5游戏开发进阶指南
2013-08-27 17:26 1317《HTML5游戏开发进阶指 ... -
ASP.NET MVC 4高级编程(第4版)
2013-08-26 17:58 1087《ASP.NET MVC 4高级编程(第4版)》 基本信息 ... -
嗨翻C语言
2013-08-26 17:40 1170《嗨翻C语言》 基本信息 作者: (美)David Gr ... -
C++ Primer中文版(第5版)
2013-08-26 17:20 1132《C++ Primer中文版(第5版) 》 基本信息 作 ... -
云计算原理与实践
2013-08-20 17:02 573《云计算原理与实践》 基本信息 作者: 游小明 罗光春 ... -
微信公众平台搭建与开发揭秘
2013-08-20 16:53 990《微信公众平台搭建与开发揭秘》 基本信息 作者: 易伟 ... -
精通iOS开发(第5版)
2013-08-20 16:25 1033《精通iOS开发(第5版)》 基本信息 原书名:Begi ... -
企业门户(Portal)项目实施方略与开发指南
2013-08-20 16:12 957《企业门户(Portal)项目实施方略与开发指南》 基本信 ... -
Java开发手册
2013-08-20 15:56 940《Java开发手册》 基本信息 作者: 桂颖 谷涛 出 ... -
Unity3D手机游戏开发
2013-08-08 17:33 1127《Unity3D手机游戏开发》 基本信息 作者: 金玺曾 ... -
矛与盾:黑客攻防命令大曝光
2013-08-08 16:30 763《矛与盾:黑客攻防命令大曝光》 基本信息 作者: awk ... -
视觉繁美:信息可视化方法与案例解析
2013-08-08 16:10 921《视觉繁美:信息可视 ... -
精益设计: 设计团队如何改善用户体验
2013-08-08 15:55 764《精益设计: 设计团队如何改善用户体验》 基本信息 原书 ... -
云计算与OpenStack(虚拟机Nova篇)
2013-08-08 15:19 944《云计算与OpenStack(虚拟机Nova篇)》 基本信 ...
相关推荐
《JAVASCRIPT语言精髓与编程实践》是周爱民撰写的一本深入解析JavaScript编程的著作,这本书旨在帮助读者理解JavaScript的核心概念,并将其应用于实际的编程实践中。JavaScript,作为全球最广泛使用的脚本语言,是...
JavaScript,一种广泛应用于Web开发的脚本语言,是前端开发的核心技术之一,也是现代互联网应用程序的...通过阅读《JavaScript语言精髓与编程实践》完整版,开发者能够系统地学习这门语言,进一步提高自己的编程能力。
### JavaScript语言精髓与编程实践(第二章):JavaScript的语法 #### 2.1 语法综述 在探讨JavaScript的语法之前,有必要澄清一个概念——**语法关键字**与**变量**的区别及其绑定机制。 ##### 2.1.1 标识符所...
《JavaScript DOM编程艺术 第2版》是一本深入探讨JavaScript与DOM(Document Object Model)交互的权威书籍。DOM是Web页面的结构化表示,通过JavaScript,我们可以利用DOM来动态地操作HTML和XML文档,实现丰富的交互...
《JavaScript.DOM编程艺术(第2版)》是深入学习JavaScript与DOM操作的重要参考资料,它涵盖了JavaScript在网页开发中的核心概念和实践技巧。DOM(Document Object Model)是HTML和XML文档的结构化表示,通过...
《CSS与DHTML精髓第2版》是一本深入探讨网页设计技术的专业书籍,它在第一版的基础上进行了更新和扩展,以满足不断发展的Web技术需求。本书主要关注的是两种核心技术:CSS(层叠样式表)和DHTML(动态超文本标记语言...
《JavaScript权威指南》第六版中文文字版是一本由David Flanagan所著的关于JavaScript语言的经典书籍,该书被认为是学习JavaScript语言的权威之作,广泛用于专业开发者和编程爱好者的参考资料。本书详细介绍了...
2. **函数与闭包**:函数是JavaScript中的第一等公民,可以作为参数传递,也可以作为返回值。闭包是一种特殊的现象,允许函数访问并操作其词法作用域内的变量,即使该函数已经执行完毕。 3. **原型与继承**:...
《JavaScript从入门到精通(第2版)》由Steve Suehring撰写,旨在帮助读者深入理解和掌握这一强大的工具。这本书的中文pdf扫描版为学习者提供了方便,使中文读者也能无障碍地学习JavaScript的精华。 在JavaScript的...
通过这本书,无论是初学者还是有经验的开发者,都可以深入学习到JavaScript的精髓,提升编程技能。同时,书中还包含了大量示例和练习,帮助读者巩固理论知识,提高实际编程能力。在阅读过程中,结合实践,将更有利于...
《JavaScript权威指南第六版中文版》是一本深受程序员喜爱的经典教程,它全面、深入地讲解了JavaScript语言的核心概念和技术。本书旨在帮助读者掌握JavaScript的精髓,无论是初学者还是经验丰富的开发者,都能从中...
《JavaScript权威指南(第6版)》是编程领域中一本极具影响力的著作,由David Flanagan撰写,本指南全面深入地探讨了...无论选择中文版还是英文版,都要结合实际编程实践,理论与实践相结合,才能更好地掌握JavaScript。
《JavaScript权威指南第六版》是一本深受欢迎的编程书籍,由David Flanagan撰写,它全面且深入地介绍了JavaScript这门语言。源码是学习编程语言的重要辅助材料,它可以帮助读者更好地理解和实践书中的示例。这里提供...
《JavaScript权威指南(第6版)》是一本深入解析JavaScript编程语言的经典著作,对于任何希望在Web开发领域有所建树的人来说,它都是不可或缺的参考书籍。这本书全面覆盖了JavaScript的核心概念、语法以及高级特性,...
《JavaScript权威指南》第五版的源码提供了一种深入理解这种语言精髓的机会,对于开发者来说是一份宝贵的资源。这本书以其详尽和严谨的讲解,覆盖了JavaScript的核心概念、语法特性以及实践应用,旨在帮助读者全面...
《C++编程思想(第2版)卷1》是众多C++程序员的启蒙之书,它不仅仅介绍了C++的基础知识,更是深入探讨了C++语言的设计思想与编程技巧。在这本书中,读者将了解到C++作为一种面向对象编程语言的核心概念,包括类与对象...
《JavaScript权威指南_第6版 中文版(附英文版)》是一本全面且深入的JavaScript编程书籍,针对JavaScript语言的最新版本进行了详尽的解释和解析。此书旨在为开发者提供一个全面、准确且权威的JavaScript知识体系,...