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