Hidden properties with Symbol
by Arnaud Buchholz
JavaScript
const api = (() => {
let _name = Symbol();
return {
set: (obj, value) => 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])}`));