Proxy - handler.setPrototypeOf
handler.setPrototypeOf() 方法用于拦截 Object.setPrototypeOf 操作。
语法
const proxy = new Proxy(target, {
  setPrototypeOf: function (target, prototype) {
    // do something
  },
});
| 参数 | 说明 | 类型 | 
|---|---|---|
| target | 目标对象 | object | 
说明
拦截
该方法会拦截目标对象的以下操作:
- Object.setPrototypeOf()
- Reflect.setPrototypeOf()
约束
如果违背了以下的约束,proxy 会抛出 TypeError:
- 如果 target不可扩展,原型参数必须与Object.getPrototypeOf(target)的值相同
示例
以下代码演示了如何拦截 Object.setPrototypeOf():
const handler = {
  setPrototypeOf(target, proto) {
    throw new Error('Changing the prototype is forbidden');
  },
};
const proto = {};
const target = function () {};
const proxy = new Proxy(target, handler);
Object.setPrototypeOf(proxy, proto);
// Error: Changing the prototype is forbidden
注意,该方法只能返回布尔值,否则会被自动转为布尔值。另外,如果目标对象不可扩展(non-extensible),setPrototypeOf() 方法不得改变目标对象的原型。