在访问数组前添加一层拦截,可以对访问操作进行统一的处理。类似拦截器的作用

数组代理

new Proxy(target, hander)

**params** { object } target 使用 Proxy 代理的目标对象 **params** { object } hander 定义代理行为的对象 **return** { object } 代理对象实例

  1. var arr = [1, 2, 3, 4, 5];
  2. var proxy = new Proxy(arr, {
  3. get(array, key) {
  4. return array[key] * 2;
  5. },
  6. set(array, key, value) {
  7. array[key] = value;
  8. }
  9. });
  10. proxy[5] = 100;
  11. console.log(proxy[1]); // 4
  12. console.log(arr); // [1, 2, 3, 4, 5, 100]

函数代理

new Proxy(target, hander)**

**params** { object } target 使用 Proxy 代理的目标对象 **params** { object } hander 定义代理行为的对象 **return** { object } 代理对象实例

  1. function add(a, b) {
  2. console.log(a + b);
  3. }
  4. const proxy = new Proxy(add, {
  5. apply(fn, ctx, args) {
  6. for (let key in args) {
  7. args[key] = args[key] * 2;
  8. }
  9. fn.apply(ctx, args);
  10. }
  11. })
  12. add(1, 2); // 3
  13. proxy.apply(window, [1, 2]); // 6