隐藏属性
-
代理的内部实现对外部代码是不可见的,因此要隐藏目标对象上的属性也轻而易举。比如
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