JavaScript Guidebook

JavaScript 完全知识体系

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