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);// trueconsole.log(this === handler);// truereturn 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,// trueReflect.getPrototypeOf(proxy) === Array.prototype,// trueproxy.__proto__ === Array.prototype,// trueArray.prototype.isPrototypeOf(proxy),// trueproxy instanceof Array// true);