用寄生组合式继承封装请求管理类,使实例继承父类request/get/post等方法,同时支持baseurl、headers、拦截器等独有配置,避免原型污染和方法重复创建。

<p>用寄生组合式继承封装请求管理类,核心是让实例继承父类方法(如 <strong>request</strong>、<strong>get</strong>、<strong>post</strong>),同时支持实例独有配置(如 baseURL、headers、拦截器),不污染原型、不重复创建共享方法。</p> <h3>1. 定义基础请求类(父类)</h3> <p>封装通用请求逻辑,只负责发请求、统一错误处理、返回 Promise,不绑定具体配置:</p>
- 使用 fetch 或 XMLHttpRequest 实现底层请求(推荐 fetch)
- 所有方法返回 Promise,便于链式调用和 await
- 提供 request(options) 作为主入口,get/post/put/delete 为语法糖
- 预留 beforeRequest 和 afterResponse 钩子,供子类或实例扩展
2. 创建寄生组合继承工具函数
避免直接修改原型链,也不用 class extends(防止静态属性/方法被继承干扰):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用 Object.create(父类.prototype) 创建干净原型对象
- 用 Object.assign(子实例, 父类实例) 复制实例属性(如默认 headers)
- 手动把父类方法绑定到子实例(或通过 call/apply 在子构造中调用父类构造)
示例关键逻辑:
function inheritChild(child, parent, config) {const instance = Object.create(parent.prototype);
parent.call(instance, config); // 执行父类构造,初始化实例属性
return instance;
}
3. 封装可配置的请求管理类(子类实例工厂)
不是传统 class,而是返回一个带独立状态的请求实例:
- 接收 config(baseURL、timeout、defaultHeaders 等)作为实例私有数据
- 每个实例拥有自己的拦截器数组(requestInterceptors / responseInterceptors)
- 拦截器支持链式执行:每个拦截器可改写 options 或 response,或提前 reject
- 方法如 get(url, data, options) 内部自动合并默认配置 + 拦截器 + 用户传参
4. 使用示例:多个业务场景共存互不干扰
不同模块用不同实例,配置隔离、拦截器独立:
// 用户 API 实例const userAPI = createRequest({
baseURL: '/api/user',
defaultHeaders: { Authorization: 'Bearer xxx' }
// 文件上传实例(单独超时 & 上传进度)
const uploadAPI = createRequest({
baseURL: '/upload',
timeout: 30000,
onUploadProgress: (e) => console.log(e.loaded / e.total)
userAPI.get('/profile').then(res => ...);
uploadAPI.post('/avatar', formData).then(...);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










