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() 方法不得改变目标对象的原型。