proxy 通过拦截 deleteproperty、get、has、ownkeys 等操作模拟软删除:deleteproperty 设逻辑标记(推荐 weakmap 存储),get/has 屏蔽已删字段,ownkeys 隐藏软删键,并提供 undelete、purge 等配套方法。

Proxy 本身不直接实现软删除,而是通过拦截对象操作(如 deleteProperty、get、has)来模拟软删除行为——即把“删除”变成标记为已删除(如加 _deleted: true),同时让后续读取、遍历等操作自动忽略这些标记项。
拦截 delete 操作,改为逻辑标记
在 deleteProperty 拦截器中,不真正删除属性,而是设置一个内部标记(例如 _deletedKeys Set 或给目标对象属性加 __deleted__: true):
- 推荐用独立元数据存储(如 WeakMap),避免污染原始对象
- 对数组可统一用
deletedIndices记录被软删的下标 - 返回
true表示删除成功(符合 delete 运算符期望)
拦截 get 和 has,屏蔽已软删字段
当访问属性时,先检查是否被标记为已删除:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
get(target, key)中若key在软删集合里,返回undefined或抛错(按需) -
has(target, key)返回false,让key in obj和Reflect.has()失效 - 注意:不可枚举属性、Symbol 键也要一并处理
拦截 ownKeys 和 enumerate,隐藏软删项
使 Object.keys()、for...in、Reflect.ownKeys() 不暴露软删字段:
- 在
ownKeys中过滤掉所有被标记的键 - 配合
getOwnPropertyDescriptor拦截,对软删键返回undefined或设enumerable: false - 数组场景下,
length不变,但keys应跳过软删索引
配套工具方法:恢复与彻底清理
软删除需配套操作才完整:
- 提供
undelete(key)方法,从软删记录中移除 - 提供
purge()方法,真正删除所有软删项(可选持久化前调用) - 可扩展
isDeleted(key)辅助判断状态
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










