# 其余模块做了什么
上一节我们讲到Object.create(context),
现在我们来看看context,request,response这些模块做了什么
# context

最后导出的context是一个Object类型,这个类型里有一些方法,比如onerrer,inspect之类

这一部分除了导出的对象外,更有意思的部分是下面的delegate,还记得我们的前置知识点一吗
这一部分的源码注释如下
delegate(proto, 'response') //当访问proto[以下属性]时,用proto.response[以下属性]回应
.method('attachment') //method表示这类属性是函数
// ...
.access('status') //access表示这类属性可以可读可写
// ...
.getter('headerSent') //getter表示这类属性只读
1
2
3
4
5
6
2
3
4
5
6
这里的意思,其实就是当我们访问proto上面的方法或者属性,我们让proto.response上的同名属性或方法来回应这些访问,
proto是什么,就是我们exports出去的那个模块,就是context
所以这一段意思就是,访问context上面某个属性,我们用context.response上的同名属性回应
你有没有想起来,我们在使用koa时,我们用ctx.body,但是body这个属性真的在ctx上吗?
接下来,我们来看看response这个模块
# response和request

↑ request部分

↑ response部分
这两张其实分别对应的就是我们访问一个网页时,request headers和response headers的内容
然后,聪明可爱的你应该注意到了,在第二张图中,有(get) body,说明当我们访问ctx.body时候,
实际上,处理属性访问的是ctx.response.body.