原型式继承适合B端配置渐进覆盖,通过“默认值→模块→角色→用户”四层委托链实现可追溯、可复用、动态更新的配置管理。

原型式继承特别适合 B 端配置项的渐进式覆盖——它不复制数据,只建立委托关系,让“通用默认值→模块约定→角色特化→用户临时修改”这四层配置自然形成一条可追溯、可复用、可动态更新的快照链。
分层建模:从基础到特化逐级派生
把配置结构按业务语义拆成清晰层级,每层都用 Object.create(上层原型) 创建:
-
全局基底:含所有系统级默认,如
required: true、placeholder: '请输入'、disabled: false -
模块层:比如「客户管理」模块覆盖
required: false,并新增searchable: true -
角色层:如「客服专员」实例覆盖
readOnly: true,并加入helpText: '仅查看权限' - 运行时层:表单加载时根据上下文(如当前用户、页面状态)再创建最终实例,只写入差异字段
安全写入:避免引用共享与误覆盖
原型链读取是安全的,但写入需注意数据隔离:
- 默认配置中不直接放数组或对象字面量,改用 getter 返回新实例:
get filters() { return [{ key: 'status', value: 'active' }]; } - 判断字段是否为当前实例自有,用
hasOwnProperty('disabled'),而不是obj.disabled !== undefined - 导出配置前做一次浅拷贝:
Object.assign({}, finalConfig),确保只含当前快照的真实值
动态生效:改一处,全链响应
利用原型链的实时委托机制,实现配置变更秒级生效:
- 调整全局
maxLength: 50,所有未显式设置该字段的模块/角色实例立即获得新限制 - 在模块层设
hidden: true,其下所有角色实例对应字段自动隐藏,无需遍历重赋 - 灰度测试时,临时关闭某类表单项的校验逻辑,只需修改原型上的
validate字段即可
与现有系统轻量集成
不需要改造原有配置管理逻辑,只需替换初始化方式:
- 原写法:
const config = { ...defaultConfig, ...moduleConfig, ...userConfig }; - 新写法:
const config = Object.create(moduleConfig, { label: { value: '客户姓名' }, required: { value: false } }); - 保持接口兼容:对外仍暴露普通对象,内部通过原型链托管默认行为










