# 内置对象

Koa 有4个内置对象,Astroboy 框架提供了扩展这4个内置对象的方法。

app/extends
└── application.js
└── context.js
└── request.js
└── response.js

例如,我们有一个判断当前客户端是否是 iOS 的一个方法 isIOS,只需要在 app/extends/context.js 文件添加一个 isIOS 方法即可。如下代码所示:

// app/extends/context.js
module.exports = {
   isIOS() {
     const iosReg = /iphone|ipad|ipod/i;
     return iosReg.test(this.get('user-agent'));
   }
};

考虑到这个方法在一次 HTTP 请求中可能会调用多次,我们一般会这么写

const IS_IOS = Symbol('Context#isIOS');

module.exports = {
   isIOS() {
     if (!this[IS_IOS]) {
       const iosReg = /iphone|ipad|ipod/i;
       this[IS_IOS] = iosReg.test(this.get('user-agent'));
     }
     return this[IS_IOS];
   }
};

或者

const IS_IOS = Symbol('Context#isIOS');

module.exports = {
   get isIOS() {
     if (!this[IS_IOS]) {
       const iosReg = /iphone|ipad|ipod/i;
       this[IS_IOS] = iosReg.test(this.get('user-agent'));
     }
     return this[IS_IOS];
   }
};