概述
proxy 意为代理,在目标对象之前设置一层拦截。当直接访问
proxy的对象,没有啥问题。当访问被代理的对象,其实是从proxy那里拿答案
基础使用
var person = {
name: 'yf'
}
var proxy = new Proxy(person,{
get: function (target,property) {
if (property in target) {
return target[property];
}else {
throw new ReferenceError("Property \" "+property + "\" does not exist.");
}
}
});
proxy.name // yf
proxy.age // 报错
注意点
- 当
Proxy的第二个参数为{},那么proxy对象直达代理对象 - 当属性不可读和不可配置时,使用
proxy代理报错
可代理方法
下面时可以代理的方法,但是参数各有不同。同时可能涉及到
Reflect
get(target,propKey,receiver)set(target,propKey,value,receiver)has(target,propKey)deleteProperty(target,propkey)ownKeys(target)getOwnPropertyDescriptor(target,propKey)defineProperty(target, propKey, propDesc)preventExtensions(target)getPrototypeOf(target)isExtensible(target)setPrototypeOf(target, proto)apply(target, object, args)construct(target, args)
this
在Proxy代理的情况下,目标对象内部的this指向proxy代理
const target = {
m: function () {
console.log(this === proxy);
}
};
const handler = {};
const proxy = new Proxy(target,handler);
target.m() // false
prox.m() // true






网友评论