隐藏属性

168 阅读1分钟

隐藏属性

  • 代理的内部实现对外部代码是不可见的,因此要隐藏目标对象上的属性也轻而易举。比如

    const hiddenProperties = ["foo", "bar"];
    const targetObject = {
      foo: 1,
      bar: 2,
      baz: 3,
    };
    const proxy = new Proxy(targetObject, {
      get(target, property) {
        if (hiddenProperties.includes(property)) {
          return undefined;
        } else {
          return Reflect.get(...arguments);
        }
      },
      has(target, property) {
        if (hiddenProperties.includes(property)) {
          return false;
        } else {
          return Reflect.has(...arguments);
        }
      },
    });
    // get()
    console.log(proxy.foo); // undefined
    console.log(proxy.bar); // undefined
    console.log(proxy.baz); // 3
    
    // has()
    console.log("foo" in proxy); // false
    console.log("bar" in proxy); // false
    consolr.log("baz" in proxt); // true