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
);