JS Proxy(代理)

2020-09-18  本文已影响0人  小李不小

什么是 proxy 代理

Proxy 也就是代理,可以帮助我们完成很多事情,例如对数据的处理,对构造函数的处理,对数据的验证,说白了,就是在我们访问对象前添加了一层拦截,可以过滤很多操作,而这些过滤,由你来定义。

let p = new Proxy(target, handler);

参数

1,target :需要使用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
2,handler: 一个对象,其属性是当执行一个操作时定义代理的行为的函数(可以理解为某种触发器)。具体的handler相关函数请查阅官网

下面是使用示例,一个简单的代理:
let test = {
    name: "小红"
  };
  test = new Proxy(test, {
    get(target, key) {
      console.log('获取了getter属性');
      return target[key];
    }
  });
  console.log(test.name);
image.png
let xiaohong = {
    name: "小红",
    age: 15
  };
  xiaohong = new Proxy(xiaohong, {
    get(target, key) {
    console.log('获取值的时候执行----')
      let result = target[key];
  // target 是xiaohong = {
   // name: "小红",
    //age: 15
  //};

//key 是 name  age
      //如果是获取 年龄 属性,则添加 岁字
      if (key === "age") result += "岁";
      return result;
    },
    set(target, key, value) {
 console.log('赋值的时候执行----')
// target 是xiaohong = {
   // name: "小红",
    //age: 15
  //};
//key 是 name  age
//value 小红 15
      if (key === "age" && typeof value !== "number") {
        throw Error("age字段必须为Number类型");
      }
      return Reflect.set(target, key, value);
    }
  });
  console.log(`我叫${xiaohong.name}  我今年${xiaohong.age}了`);
  xiaohong.age = "aa";

  console.log(test.name);
test.age=888

获取值的时候执行---- get console.log(test.name);

赋值的时候执行---- set test.age=888

上一篇下一篇

猜你喜欢

热点阅读