1、代理Proxy
作用:将对象交给Proxy代理,编写处理函数,来拦截目标对象的操作。
2、使用
Proxy中有两个参数,一个是被搭理的对象,一个是要进行的一些操作(使用花括号)。
3、几个API的介绍
get(target、property) 方法:获取对象的属性前进行的一些操作。
set(target,property,value)方法:对对象的属性进行的一些操作
ownKeys(target) 方法:将希望暴露的属性暴露出来。
has(target,property)方法:判断是否有该属性,如果有返回true,没有返回false。
1 <script> 2 let car = { 3 name: '大奔', 4 price: 1500000, 5 long: '150米' 6 } 7 let pro = new Proxy(car, { 8 get(target, property) { 9 if (property == 'name') { 10 console.log('大奔你值得拥有!'); 11 } 12 return target[property] 13 }, 14 set(target, property, value) { 15 // console.log(property) 16 17 if (property == 'addPrice') { 18 target.price += value; 19 } 20 }, 21 ownKeys(target) { 22 return [name, price, long] 23 }, 24 has(target, property) { 25 if (target[property] === undefined) { 26 return false; 27 } 28 else { 29 return true; 30 } 31 } 32 }) 33 pro.addPrice = 50000; 34 console.log(pro.price); 35 console.log('price' in pro);//true 36 console.log('age' in pro); //false 37 pro.name;//大奔你值得拥有 38 </script>
4、可取消的代理 Proxy.revocable()
1 <script> 2 let Qiang = { 3 'name': '郭俊强' 4 } 5 let qiang = { 6 get(target, property) { 7 return '强' 8 } 9 } 10 let object = Proxy.revocable(Qiang, qiang); 11 console.log(object.proxy.name); 12 object.revoke(); 13 console.log(object.proxy.name); //报错 14 </script>