set()

103 阅读1分钟

set()

  • set()捕获器 会在设置属性值的操作中被调用。对应的反射 API 方法为 Reflect.set()。
    const myTarget = {};
    const proxy = new Proxy(myTarget, {
      set(target, property, receiver) {
        console.log("get()");
        return Reflect.set(...arguments);
      },
    });
    proxy.foo = "bar";
    // set()
    
  1. 返回值
    返回 true 表示成功;返回 false 表示失败,严格模式下会抛出 TypeError。
  2. 拦截的操作
    proxy.property = value;
    proxy[property] = value;
    Object.create(proxy)[property] = value;
    Reflect.set(proxy, property, value,receiver)
    
  3. 捕获器处理程序参数
    target: 目标对象。
    property: 引用的目标对象上面的字符串属性。
    value: 要赋给属性的值。
    receiver: 接收最初赋值的对象。
  4. 捕获器不变式
    如果 target.property 不可写且不可配置,则不能修改目标属性的值
    如果 target.property 不可配置且[[set]]特性为 undefined, 则不能修改目标属性的值。在严格模式下,处理程序中返回 false 会抛出 TypeError