Proxy - handler.getPrototypeOf
handler.getPrototypeOf() 方法用于拦截获取对象原型。
语法
const proxy = new Proxy(target, {
getPrototypeOf: function (target) {
// do something
},
});
| 参数 | 说明 | 类型 |
|---|---|---|
target |
目标对象 | object |
说明
拦截
该方法会拦截目标对象的以下操作:
Object.getPropertyOf()Reflect.getPrototypeOf()__proto__Object.prototype.isPrototypeOf()instanceof
约束
如果违背了以下的约束,proxy 会抛出 TypeError:
getPrototypeOf()方法返回的不是对象也不是null- 目标对象是不可扩展的,且
getPrototypeOf()方法返回的原型不是目标对象本身的原型
示例
const obj = {};
const proto = {};
const handler = {
getPrototypeOf(target) {
console.log(target === obj);
// true
console.log(this === handler);
// true
return proto;
},
};
const proxy = new Proxy(obj, handler);
console.log(Object.getPrototypeOf(proxy) === proto);
// true
五种触发 getPrototypeOf() 代理方法的方式:
const obj = {};
const proxy = new Proxy(obj, {
getPrototypeOf(target) {
return Array.prototype;
},
});
console.log(
Object.getPrototypeOf(proxy) === Array.prototype,
// true
Reflect.getPrototypeOf(proxy) === Array.prototype,
// true
proxy.__proto__ === Array.prototype,
// true
Array.prototype.isPrototypeOf(proxy),
// true
proxy instanceof Array
// true
);