JavaScript 动态函数式语言精髓 PDF 文档
我相信,在这个世界上无时不刻地在产生着新的语言。例如我刚才叫住我脚下的这只小猫,我喊了一声“嗨”,它就停下来望着我。如同我与猫一样,你可能正在用另外的一种语言——声音的,或者符号的——与另外一种个体进行着交流。
无论这种个体是否是一个鲜活的生命,还是一堆电器元件,如果你们需要交流,那么唯一的方式就是创生一种语言,或者使用两种个体既有的语言之一进行交流。
我们一边在创生着与计算机交流的语言,一边也不得不用既有的语言与之交流。这就是现状。这与此时我跟脚下的猫,或者数千年前的铸剑师与一柄剑之间交流时的情状,是完全一样的。
前言
语言
分类法
漏掉了点儿什么
特性
合理性
技巧
本书讲的不是技巧
本书讲什么
本书的适读者
十年JavaScript
第一段在网页中的代码
新鲜的玩意儿
第一段在网页中的代码
最初的价值
用JavaScript来写浏览器上的应用
我要做一个聊天室
Flash的一席之地
RWC与RIA之争
没有框架与库的语言能怎样发展呢?
做一个框架
重写框架的语言层
富浏览器端开发(RWC)与Ajax
为JavaScript正名
JavaScript
CoreJavaScript
SpiderMonkeyJavaScript
ECMAScript
JScript
[XXX]JavaScript的应用环境
宿主环境(hostenvironment)
外壳程序(shell)
运行期环境(runtime)
[XXX]回顾
JavaScript的语法
语法综述
识别语法错误与运行错误
JavaScript的语法:变量声明
变量的数据类型
值类型与引用类型
变量声明
变量声明中的一般性问题
字符串直接量、转义符
数值直接量
函数直接量声明
正则表达式的常见问题
数组的常见问题
JavaScript的语法:表达式运算
一般表达式运算
逻辑运算
字符串运算
比较运算
等值检测
序列检测
赋值运算
函数调用
特殊作用的运算符
运算优先级
JavaScript的语法:语句
表达式语句
一般表达式语句
赋值语句与变量声明语句
函数调用语句
分支语句
条件分支语句(if语句)
多重分支语句(switch语句)
循环语句
流程控制:一般子句
标签声明
break子句
continue子句
return子句
流程控制:异常
面向对象编程的语法概要
对象直接量声明与实例创建
使用构造器创建对象实例
对象直接量声明
对象成员列举、存取和删除
属性存取与方法调用
对象及其成员的检查
可列举性
缺省对象的指定
运算符的二义性
加号“+”的二义性
括号“()”的二义性
冒号“:”与标签的二义性
大括号“{}”的二义性
逗号“,”的二义性
方括号“[]”的二义性
JavaScript的非函数式语言特性
概述
命令式语言与结构化编程
结构化的疑难
“面向对象语言”是突破吗?
更高层次的抽象:接口
再论语言的分类
JavaScript的命令式语言渊源
基本语法的结构化含义
基本逻辑与代码分块
模块化的层次:语法作用域
主要的语法作用域及其效果
语法作用域之间的相关性
执行流程及其变更
级别2:“break<label>”等语法
级别3:return子句
级别4:throw语句
执行流程变更的内涵
模块化的效果:变量作用域
级别1:表达式
级别2:语句
级别3:函数(局部)
级别4:全局
变量作用域中的次序问题
变量作用域与变量的生存周期
语句的副作用
[XXX]基本数据类型的结构化含义
JavaScript中的原型继承
空对象(null)与空的对象
原型继承的基本性质
空的对象是所有对象的基础
构造复制?写时复制?还是读遍历?
构造过程:从函数到构造器
预定义属性与方法
原型链的维护
两个原型链
constructor属性的维护
内部原型链的作用
原型继承的实质
原型修改
原型继承
原型继承的实质:从无到有
如何理解“继承来的成员”?
JavaScript的对象系统
封装
多态
事件
类抄写?或原型继承?
类抄写
原型继承
如何选择继承的方式
JavaScript中的对象(构造器)
不能通过继承得到的效果
[XXX]综述
JavaScript的函数式语言特性
概述
从代码风格说起
为什么常见的语言不赞同连续求值
函数式语言的渊源
函数式语言中的函数
函数是运算元
在函数内保存数据
函数内的运算对函数外无副作用
从运算式语言到函数式语言
JavaScript中的几种连续运算
连续赋值
三元表达式的连用
一些运算连用
函数与方法的调用
运算式语言
运算的实质,是值运算
有趣的运算:在InternetExplorer和J2EE中
如何消灭掉语句
通过表达式消灭分支语句
通过函数递归消灭循环语句
其它可以被消灭的语句
函数:对运算式语言的补充和组织
函数是必要的补充
函数是代码的组织形式
当运算符等义于某个函数
“函数”==“lambda”
当运算符等义于某个函数
JavaScript语言中的函数式编程
JavaScript中的函数
可变参数数,与值参数传递
非惰性求值
函数是第一型
函数是一个值
可遍历的调用栈
callee:我是谁
caller:谁呼(叫)我
闭包
什么是闭包
什么是函数实例与函数引用
(在被调用时,)每个函数实例至少拥有一个闭包
函数闭包与调用对象
“调用对象”的局部变量维护规则
“全局对象”的变量维护规则
函数闭包与“调用对象”的生存周期
引用与泄漏
函数实例拥有多个闭包的情况
语句或语句块中的闭包问题
闭包中的标识符(变量)特例
函数对象的闭包及其效果
闭包与可见性
函数闭包带来的可见性效果
对象闭包带来的可见性效果
匿名函数的闭包与可见性效果
综述
JavaScript的动态语言特性
概述
动态数据类型的起源
动态执行系统的起源
编译系统、解释系统与编码
动态执行
脚本系统的起源
脚本只是一种表面的表现形式
动态执行(eval)
动态执行与闭包
eval代码专享闭包
eval可以使用全局闭包
eval使用当前函数的闭包
动态执行过程中的语句、表达式与值
奇特的、甚至是负面的影响
变量作用域可能变化
代码的不可编译性
动态方法调用(call与apply)
动态方法调用中指定this对象
丢失的this引用
栈的可见与修改
兼容性:低版本中的call()与apply()
重写
原型重写
构造器重写
语法声明与语句含义不一致的问题
对象检测的麻烦
构造器的原型(prototype属性)不受重写影响
“内部对象系统”不受影响
让用户对象系统影响内部对象系统
构造器重写对直接量声明的影响
构造绑定
内置构造器重写的概述
对象成员的重写
成员重写的检测与删除
宿主对重写的限制
重写与引用
宿主环境的限制
引擎对重写的限制
this的重写
语句语法中的重写
结构化异常处理中的重写
包装类:面向对象的妥协
显式包装元数据
隐式包装的过程与检测方法
包装值类型数据的必要性与问题
其它直接量与相应的构造器
函数特例
正则表达式特例
关联数组:对象与数组的动态特性
关联数组是对象系统的基础
用关联数组实现的索引数组
干净的对象
类型转换
宿主环境下的特殊类型系统
值运算:类型转换的基础
隐式转换
运算导致的类型转换
语句(语义)导致的类型转换
值类型之间的转换
undefined的转换
number的转换
boolean的转换
string的转换
值类型数据的显式转换
从引用到值:深入探究valueOf()方法
到字符串类型的显式转换
重写toString()方法
从数值到字符串的显式转换
其它类型的显式转换
序列化
综述
Qomo框架的核心技术与实现
Qomo框架的技术发展与基本特性
Qomo框架的技术发展
两种技术方案的选择
WEUI所奠定的基本风格
Qomo完善了整个内核框架
Qomo的体系结构
Qomo框架设计的基本原则
基于类继承的对象系统
Qomo类继承的基本特性
Qomo类继承的语法
基本的类类型声明与使用
特性、默认读写器与限制符
多投事件与继承父类方法
Qomo类继承系统的实现
类继承系统的基本思想
类继承系统的实现框架
类数据块(CDB)与实例数据块(IDB)
细节1:特性、读写器和存取限制符
细节2:调用父类方法
细节3:对多投事件系统的支持
细节4:实例构造周期的特殊性
Qomo类继承系统的高级话题
类构造周期的完整特性与工具函数
实例构造周期重写读写器(getter/setter)
类注册函数Class()的特殊语法与应用
Qomo对象仍然是基于原型构造的
Qomo对象构造的第二种语法
读写器声明的隐式效果
通用读写器
this.Create()的作用与重写
多投事件系统
多投事件系统的基本特性与语法
多投事件系统的实现
多投事件的中断与返回值
多投事件系统的安全性
接口系统
基本概念与语法
接口的声明与继承性
接口的注册
接口的查询
接口实现
类实现接口
对象实现接口
用户实现接口
Qomo接口系统的高级话题
将接口注册到构造器、类与类类型
函数作委托者的二义性问题
接口的接口
接口内聚(内部聚合)
接口与特性读写器
为特定的对象注册接口
接口委托
接口委托的基本方法
接口委托中的代理函数
普通函数作委托者
构造器函数作委托者
类类型作委托者
委托协议
委托方法中的this引用
Qomo接口系统的实现
接口系统的实现框架
接口注册的实现
接口查询的实现
聚合与委托的实现
命名空间
Qomo的命名空间的复杂性
命名空间的使用
空间创建
将类注册到命名空间
查询与转换
命名空间的实现
AOP
基本概念与语法
切面对象与切点
将切面关联到被观察者
切面行为
高级切面特性
定制连结点与定制切面
切面的合并(merge)和联合(combine)
切面行为间的数据传递
切面对目标系统的影响
匿名函数的切面
函数名对切面系统的影响
Qomo中切面系统的实现
其它
装载、内联与导入
装载:$import()
内联:$inline()
导入:$import2()
四种模板技术
连接槽:joinSlot()
格式化字符串:format()
模板对象:Pattern()
模板类:TTemplet
出错处理
其它功能模块
性能分析工具
兼容与增强模块
框架类
集成:$builder
一般性的动态函数式语言技巧
消除代码的全局变量名占用
一次性的构造器
对象充当识别器
识别new运算进行的构造器调用
使用直接量及其包装类快速调用对象方法
三天前是星期几?
使用对象的值含义来构造复杂对象
控制字符串替换过程的基本模式
实现二叉树
将函数封装为方法
使用with语句来替代函数参数传递
使用对象闭包来重置重写
构造函数参数
使用更复杂的表达式来消减IF语句
利用钩子函数来扩展功能
安全的字符串
附录一:相关资料及参考章节
附录二:术语表
下载地址:https://www.wenjiangs.com/wp-content/uploads/2023/03/JTjvjMfVOKAwsvOA.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论