// Proxy pattern example for controlling access to a sensitive object // but taking advantage of JavaScript's Proxy class // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy // Exact same class as before class SensitiveObject { constructor(data) { this.data = data; } access() { console.log('Accessing sensitive object'); return this.data; } } // Proxy handler for access control const handler = { get(target, property) { if (property === 'data' && !this.checkAccess()) { console.log('Access denied'); return undefined; } if (property === 'access') { if (this.checkAccess()) { return target[property].bind(target); } else { return () => console.log('Access denied'); } } console.log(`Accessing property '${property}'`); return target[property]; }, checkAccess() { // Perform validation or checks here return false; // Simulating access denial for demonstration } }; // Creating a proxy object const sensitiveObject = new SensitiveObject('sensitive data'); const proxy = new Proxy(sensitiveObject, handler); // Using the proxy object console.log(proxy.data); // Access denied, undefined proxy.access(); // Access denied // Modifying the checkAccess method to grant access handler.checkAccess = function() { return true; // Granting access for demonstration }; console.log(proxy.data); // Accessing property 'data', Sensitive data proxy.access(); // Accessing sensitive object