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