JavaScript Guidebook

JavaScript 完全知识体系

Proxy - handler.getPrototypeOf

handler.getPrototypeOf() 方法用于拦截获取对象原型。

语法

const proxy = new Proxy(target, {
getPrototypeOf: function (target) {
// do something
},
});
参数说明类型
target目标对象object

说明

拦截

该方法会拦截目标对象的以下操作:

  • Object.getPropertyOf()
  • Reflect.getPrototypeOf()
  • __proto__
  • Object.prototype.isPrototypeOf()
  • instanceof

约束

如果违背了以下的约束,proxy 会抛出 TypeError:

  • getPrototypeOf() 方法返回的不是对象也不是 null
  • 目标对象是不可扩展的,且 getPrototypeOf() 方法返回的原型不是目标对象本身的原型

示例

const obj = {};
const proto = {};
const handler = {
getPrototypeOf(target) {
console.log(target === obj);
// true
console.log(this === handler);
// true
return proto;
},
};
const proxy = new Proxy(obj, handler);
console.log(Object.getPrototypeOf(proxy) === proto);
// true

五种触发 getPrototypeOf() 代理方法的方式:

const obj = {};
const proxy = new Proxy(obj, {
getPrototypeOf(target) {
return Array.prototype;
},
});
console.log(
Object.getPrototypeOf(proxy) === Array.prototype,
// true
Reflect.getPrototypeOf(proxy) === Array.prototype,
// true
proxy.__proto__ === Array.prototype,
// true
Array.prototype.isPrototypeOf(proxy),
// true
proxy instanceof Array
// true
);