Proxy ownKeys is used to trap the access of the owned properties and owned symbol properties via Object.keys(), Object.getOwnPropertyNames() or Object.getOwnSymbolProperties().
This can be used in combination with the has trap handler to strengthen the privacy of the target object properties.
These properties are not be completely private:
const restaurant = { soda: 5, //ww w . j a v a 2 s. co m beer: 10 }; const restHandler = { has: function(target, property) { if (property === "beer") { return false; } return property in target; }, ownKeys: function(target) { return ["soda"]; } } const restProxy = new Proxy(restaurant, restHandler); console.log("beer" in restProxy); // false console.log(Object.keys(restProxy)); // ["soda"]
You can add another trap handler: getOwnPropertyDescriptor, which traps the Object.getOwnPropertyDescriptor() calls, to enhance the privacy.