ES5 ENUM implementation
function ENUM(){
return Object.create({}, {
add: {
value: function (name) {
name = name.replace(/\s/, '_').replace(/\W/, '').toUpperCase();
var ptr = this;
Object.defineProperty(ptr, name, {
enumerable: true,
configurable: false,
writable: false,
value: 1 << Object.keys(ptr).length
});
},
writable: false,
enumerable: false,
configurable: false
},
valueOf: {
value: function (val) {
return (function (ptr) {
return Object.keys(ptr).filter(function (key) {
return ptr[key] === val;
}).pop();
})(this);
},
writable: false,
enumerable: false,
configurable: false
},
get: {
value: function (key) {
return (function (ptr) {
return ptr[key];
})(this);
},
writable: false,
enumerable: false,
configurable: false
}
});
}