Proxy
是什么
ES6新增的一个代理,可以获取传入的目标,经过处理函数处理后返回
let obj = {
name: '大亦',
age: 21
};
let newObj = new Proxy(obj, {
get(target, property) {
if (property in target) {
return target[property];
} else {
throw new ReferenceError(`${property} 不在这个对象里`);
}
}
});
console.log(newObj.name);
console.log(newObj.age);
console.log(newObj.grade);
怎么用
ES6定义了一个新的全局构造函数Proxy
。它带有两个参数:目标对象和处理程序对象。
var target = {}, handler = {};
var proxy = new Proxy(target, handler);
代理的所有方法都会转发给target也就意味着,调用proxy.[aaa]他将只返回target.[aaa]
代理有时会失败类型检查目标是否通过。例如,即使代理服务器的目标是DOM元素,代理服务器也不是真正的元素。
用处
每当您要观察或记录对对象的访问时,它们无疑很有用。它们将方便调试。测试框架可以使用它们来创建模拟对象。
如果您需要的行为略微超出普通对象的行为,则代理很有用:例如,懒散地填充属性。
e.g.
拦截所有设置对象,并在控制台打印错误
var target = {};
var handler = {
set: function (target, key, value, receiver) {
throw new Error("请不要对这个对象的属性进行修改");
}
};
var proxy = new Proxy(target, handler);
proxy.name = "angelina";
// Error:请不要对这个对象的属性进行修改