Proxy是什么?
第一次听说proxy的时候,是vue3上线之后,响应式原理更改为proxy做代理(取缔object.defineProperty),作用就是代理。
代理?怎么越看越迷糊,阮大佬对其的解释是:
Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。
个人理解是:你在对目标对象做操作时,例如打点获取proxy对象的某个属性时,proxy中的get函数会对此次操作进行拦截,执行完get方法后,你所获得的值,是get方法的返回值。
代码:
let obj={
name:'tjq',
age:18
}
//创建一个新的proxy对象
let pro =new Proxy(obj,{
//get拦截
get(tag,val)
{
//tag:被代理的对象,这里指obj变量 val,调取的属性名,例如下面,我调取的是name属性
console.log('get==',tag,val);
return '这个是我proxy给你的值' //可以设置 return tag[val] 来返回对应的属性值
}
})
//我们在获得name属性时,会自动调取get函数,拿到该函数的返回值
console.log(pro.name);//打印结果是----这个是我proxy给你的值
需要注意的是,并非仅仅有get的拦截,还有set、apply、construct等等的拦截