属性验证

108 阅读1分钟

属性验证

  • 因为所有赋值操作都会触发 set()捕获器,所以可以根据所赋的值决定是允许还是拒绝赋值。

    const target = {
      onlyNumbersGoHere: 0,
    };
    const proxy = new Proxy(target, {
      set(target, property, value) {
        if (typeof value !== "number") {
          return false;
        } else {
          Reflect.set(...arguments);
        }
      },
    });
    proxy.onlyNumbersGoHere = 1;
    console.log(proxy.onlyNumbersGoHere); // 1
    proxy.onlyNumbersGoHere = "2";
    console.log(proxy.onlyNumbersGoHere); // 1