Hidden properties
by Arnaud Buchholz
JavaScript
const api = (() => {
let _name = `__hidden__${new Date().getTime()}`;
return {
set: (obj, value) => !obj.hasOwnProperty(_name)
? Object.defineProperty(obj, _name, {
value: value,
writable: true,
enumerable: false,
configurable: false
})
: obj[_name] = value,
get: obj => obj[_name]
}
})();
const log = text => {
let line = document.createElement("div");
line.appendChild(document.createTextNode(text));
document.body.appendChild(line);
}
let testObj = {
visible: true,
value: "abc"
};
api.set(testObj, "ninja");
log("Accessing the property: " + api.get(testObj));
log("Visible properties: " + Object.keys(testObj));
// Workaround
log("Workaround result");
let descriptors = Object.getOwnPropertyDescriptors(testObj);
Object.keys(descriptors)
.forEach(name => log(`${name}: ${JSON.stringify(descriptors[name])}`));