Proxy 与 Reflect 能实现什么,存在哪些限制?
参考答案
Proxy 可以拦截对象的读取、写入、属性枚举和函数调用等操作;Reflect 提供与这些内部操作对应的方法,适合在 trap 中保持默认行为,尤其是传递 receiver 时的访问器 this 语义。
响应式系统通常在 get 中收集依赖、set 中触发更新,但还要处理删除、迭代、数组长度以及集合类型。代理对象和原对象具有不同身份,绕过代理直接修改原对象可能不触发追踪。
trap 必须遵守对象内部不变量,例如不可配置属性的约束。某些内置对象方法依赖内部槽,直接套代理可能导致调用失败。Proxy 也不提供完整沙箱能力,不能作为执行不可信代码的唯一隔离方案。