Skip to content

Instantly share code, notes, and snippets.

@r3b
Created May 25, 2017 19:21
Show Gist options
  • Save r3b/d1310615bb2eaa338ed89ef5c3d88c6b to your computer and use it in GitHub Desktop.
Save r3b/d1310615bb2eaa338ed89ef5c3d88c6b to your computer and use it in GitHub Desktop.
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
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment