工厂函数封装构造调用,对外隐藏new,提供语义化创建接口(如createengineer),内部仍用new调用构造函数,保持原型链和instanceof检查不变,并支持参数映射、默认值补全、合法性校验及初始化增强。

直接用工厂函数封装构造调用,对外不暴露 new,使用者只需传参、拿对象,无需关心实例化过程。
工厂函数内部仍用 new,但调用方完全感知不到
工厂函数本质是“代理层”,它内部照常使用 new 调用构造函数,但把这一步隐藏起来。外部代码不再写 new Employee(...),而是调用 createEngineer(...) 这类语义清晰的函数。
- 构造函数保持原有逻辑,仅作内部实现细节
- 工厂函数负责接收业务参数(如部门、职级),再映射为构造函数所需的底层类型码
- 例如:
createEngineer('Alice', 'DevOps')内部执行new Employee('Alice', 'E')
逐步替换,降低风险
旧项目中已有大量 new Employee(...) 调用时,不必一次性全改。可以逐个替换成工厂调用,每次只改一处,跑通对应测试即可。
- 每处替换后,对象行为不变,只是创建方式更语义化
- 后续可将构造函数设为私有(TypeScript 中用
private constructor)或限制其导出范围 - 长期看,构造函数退为纯实现,工厂函数成为唯一合法入口
工厂函数可统一处理初始化逻辑
除了隐藏 new,工厂函数还能承担构造前的预处理和校验,让构造函数更专注“赋值”本身。
- 自动补全默认值:如未传部门,按规则设为 'Engineering'
- 参数合法性检查:typeCode 不合法时提前抛错,避免实例处于无效状态
- 返回前做轻量增强:添加日志标记、打时间戳、绑定上下文等
注意 this 和原型链不受影响
只要工厂函数内部用 new 创建实例并原样返回,该对象的 constructor、__proto__ 和原型方法都保持完整。
-
emp instanceof Employee仍为true - 所有定义在
Employee.prototype上的方法均可正常使用 - 与直接
new创建的对象在运行时行为完全一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











