Object.getPrototypeOf(proxy) 默认返回 target 的原型而非 Proxy 自身原型;若未定义 getPrototypeOf 捕获器,则等价于 Object.getPrototypeOf(target);若定义了该捕获器,则以其返回值为准(须为对象或 null);Proxy 自身的 [[Prototype]] 为 Object.prototype,但不影响此行为。

Object.getPrototypeOf 在处理 Proxy 对象时,返回的是其内部目标对象(target)的原型,而不是 Proxy 本身的原型。
Proxy 对象没有自己的原型链入口
Proxy 是一个“透明包装器”,它本身不参与原型链查找。当你对 Proxy 调用 Object.getPrototypeOf() 时,JavaScript 引擎会自动解包,获取其 target 的原型:
- 如果 Proxy 没有自定义
getPrototypeOf捕获器,就直接返回Object.getPrototypeOf(target) - 如果设置了
getPrototypeOf捕获器,则执行该捕获器,并以它的返回值为准(可任意控制) - Proxy 实例的 [[Prototype]] 内部槽始终是
Object.prototype(除非显式设置),但Object.getPrototypeOf(proxy)不读取这个槽
默认行为:返回 target 的原型
例如:
const target = {};const proxy = new Proxy(target, {});
console.log(Object.getPrototypeOf(proxy) === Object.getPrototypeOf(target)); // true
console.log(Object.getPrototypeOf(proxy) === Object.prototype); // true
可通过捕获器覆盖返回值
你可以用 getPrototypeOf 捕获器完全控制返回结果,甚至返回 null 或非对象值(但需符合规范约束):
立即学习“Java免费学习笔记(深入)”;
- 捕获器必须返回对象或
null,否则抛出TypeError - 返回值会被当作代理对象的“逻辑原型”,影响
instanceof、属性继承等行为 - 注意:即使捕获器返回了新原型,
proxy instanceof SomeConstructor仍依赖该原型是否在原型链上
与 Object.setPrototypeOf 的配合限制
Object.setPrototypeOf(proxy, newProto) 默认会失败(抛出 TypeError),因为 Proxy 的 setPrototypeOf 捕获器默认返回 false(不可配置)。要支持修改,需显式实现该捕获器并返回 true:
- 仅当
setPrototypeOf捕获器返回true且新原型合法时,修改才生效 - 此时再调用
Object.getPrototypeOf(proxy)就会返回你设置的新原型


















