《TypeScript图形渲染实战:2D架构设计与实现》 —2.4.8 声明TypeScript中的回调函数
2.4.8 声明TypeScript中的回调函数
在2.4.7节中的doGetAsync方法中,声明了回调函数(或方法)类型为 ( response : HttpResponse ) => void,下面来了解一下其语法组成:
* 没有声明函数(或方法)名,可以将回调函数(或方法)看成匿名函数(或方法)。
* 在( )对中声明了参数名response和参数类型HttpResponse。
* 在箭头=>后声明了返回类型,代码中是返回void类型。
然后找出一些隐藏的内容,例如参数的个数,以及如果有多个参数的话,参数声明的顺序,这些要素组成了函数(或方法)的签名(Signature)。
回顾一下,函数(或方法)的签名是由:参数类型、参数个数、参数声明顺序及返回类型组成。函数(或方法)签名确定了函数(或方法)的类型,只要符合该签名的所有函数(或方法),都可以在运行时进行替换(运行时动态绑定),其实这就是面向对象3要素中多态的底层原理。
回调函数(或方法)是面向对象编程或写框架的一项重要技术,也是一种思想,即封装一切不变(需求明确)的代码,将可变(需求不明确)的代码通过回调函数(或方法)或虚函数的方式公开给第三方实现。
虚方法就是子类可以覆写(override)的基类方法,在TypeScript中,可以将类的所有非静态方法都看作虚方法,在子类中都可以覆写(override)。
关于回调函数(或方法)与基于虚函数覆写(override)的技术选型,依赖于个人的需求或喜好。它们之间的区别是:回调函数(或方法)不需要继承,而虚函数覆写(override)则需要继承基类。
回过头来看一下doGetAsync的实现依据,不变的部分(需求明确)是通过XMLHttpRequest请求文本或二进制数据,不管成功与否,都要让调用方知道。可变的部分(需求不明确)是,框架或代码编写者根本不知道调用方成功拿到服务器上的数据后要干什么,如果数据请求失败了要干什么,所以通过回调函数(或方法),让第三方来决策想要干什么。
- 点赞
- 收藏
- 关注作者
评论(0)