Vue之Proxy

proxy是es6的语法,Proxy可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过 滤和改写。Proxy这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。

写一个get的代理方法:

 1 var person ={
 2   name:'zhangshan'
 3 }
 4 
 5 var proxy = new Proxy(person,{
 6   get:function(target,property){
 7     if(property in target)
 8     {
 9       console.log('has property')
10       return target[property]
11     }
12     else{
13       console.log('no property')
14       return 250
15     }
16   }
17 })
18 
19 console.log(proxy.name)
20 console.log(proxy.age)

 

 

总结:

get方法拦截了获取属性的方法,先执行get方法的拦截,拦截之后的返回值就是最终显示的值。

 

set方法:

 1 var person ={
 2   name:'zhangshan'
 3 }
 4 
 5 var proxy = new Proxy(person,{
 6   set:function(target,property,value){
 7     if(property in target)
 8     {
 9       console.log('has property')
10       target[property] = value
11     }
12     else{
13       console.log('no property')
14       target[property] = 250
15     }
16   }
17 })
18 
19 proxy.name = 'lisi'
20 proxy.age = 18
21 console.log(proxy.age)

 

 总结:

set方法可以实现对属性赋值的拦截,提前做好各种业务处理。

 

deleteProperty:

 1 var person ={
 2   name:'zhangshan'
 3 }
 4 
 5 var proxy = new Proxy(person,{
 6   deleteProperty:function(target,property){
 7     if(property in target)
 8     {
 9       console.log('has property=' +property)
10       //Reflect.deleteProperty(target, property);
11       return  delete target[property]
12     }
13     else{
14       console.log('no property')
15       return false
16     }
17   }
18 })
19 
20 console.log(delete proxy.age)
21 console.log(delete proxy.name)
22 console.log(proxy.name)

原链接:https://blog.51cto.com/u_12701820/3079609

posted @ 2022-09-28 16:14  强者之途  阅读(1230)  评论(0编辑  收藏  举报
/* 看板娘 */