Proxy 代理的应用很广泛 ,这一篇我着重讲解它的基础用法
一 概念
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。
首先先看一个例子
let persionM = {
name: "白小纯",
kills: "不死功",
sex: "男"
}
let ProxyBai = new Proxy(persionM, {
get: function (target: any, propKey) {
console.log(target, propKey, 99, target[propKey])
return "拦截返回的值"
},
set: function (target, propKey, value, receiver) {
console.log('target:', target, ';propKey:', propKey, ';receiver:', receiver);
return Reflect.set(target, propKey, value, receiver);
}
})
console.log(ProxyBai.name)
//读取 对象的那么属性 会打印出来什么
// {name: "白小纯", kills: "不死功", sex: "男"} "name" 99 "白小纯"
// 拦截返回的值
console.log(ProxyBai.name = "setName")
//target: {name: "白小纯", kills: "不死功", sex: "男"} ;propKey: name ;receiver: Proxy {name: "白小纯", kills: "不死功", sex: "男"}
// setName
上面的代码给 persionM 对象设置一个拦截器 ,并重新定义了他的get 和set 方法