Proxy 核心代码 自定义实现

1// const data = {
2//     name: 'zhangsan',
3//     age: 20,
4// }
5const data = ['a', 'b', 'c'];
6
7const proxyData = new Proxy(data, {
8  get(target, key, receiver) {
9    // 只处理本身(非原型的)属性
10    const ownKeys = Reflect.ownKeys(target);
11    if (ownKeys.includes(key)) {
12      console.log('get', key); // 监听
13    }
14
15    const result = Reflect.get(target, key, receiver);
16    return result; // 返回结果
17  },
18  set(target, key, val, receiver) {
19    // 重复的数据,不处理
20    if (val === target[key]) {
21      return true;
22    }
23
24    const result = Reflect.set(target, key, val, receiver);
25    console.log('set', key, val);
26    // console.log('result', result) // true
27    return result; // 是否设置成功
28  },
29  deleteProperty(target, key) {
30    const result = Reflect.deleteProperty(target, key);
31    console.log('delete property', key);
32    // console.log('result', result) // true
33    return result; // 是否删除成功
34  },
35});