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