无框架前端可用原型继承实现轻量依赖注入:构造函数接收依赖并赋值this,工厂函数集中创建服务,Object.create构建可继承依赖容器,支持运行时Mock替换。

在无框架依赖的前端工程中,用原型继承实现轻量级依赖注入,核心不是“往原型上塞依赖”,而是让实例在创建时就拿到所需能力——既保持继承结构干净,又避免全局耦合或硬编码。
构造函数注入:依赖随实例诞生
原型链只负责方法共享,状态和依赖必须落在实例上。所有依赖都应作为参数传入构造函数,并赋值给 this:
- 父类构造函数声明依赖参数(如
api、logger),并存为this.api - 子类构造函数调用
Parent.call(this, api, logger),确保依赖正确传递和初始化 - 业务方法统一通过
this.api.fetch()使用,不查原型、不读全局
工厂函数集中管理服务实例
避免 new ApiClient() 散落在各处。统一建一个 services.js:
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
- 导出工厂函数,如
createApiClient({ baseUrl }),封装创建逻辑 - 在应用入口一次性构造完整服务对象:
const services = { api: createApiClient(...), logger: new ConsoleLogger(...) } - 后续所有模型或组件都从该对象取依赖,而非自行实例化
结合 Object.create 构建可继承的依赖容器
可定义一个基础依赖容器原型,供各类业务模型继承:
立即学习“前端免费学习笔记(深入)”;
- 定义
const ServiceContainerProto = {},挂通用方法如getApi()、getLogger() - 每个模型(如
UserModel)用Object.create(ServiceContainerProto)继承它 - 在模型构造函数中接收
services并保存为实例属性:this.services = services - 这样所有子类都能通过
this.services.api安全访问,且彼此隔离
运行时替换支持 Mock 切换
只要依赖全部来自外部注入,Mock 就只需替换一次源头:
- 生产环境传入真实服务:
new UserModel(services) - 测试环境传入模拟服务:
new UserModel({ api: mockApi, logger: mockLogger }) - 无需修改任何模型内部代码,也不依赖 provide/inject 或 DI 容器

















