es6之Proxy代理

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>

  

原文地址:https://www.cnblogs.com/qianqiang0703/p/13612535.html