Skip to content

Instantly share code, notes, and snippets.

@otakustay
Created October 18, 2013 16:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save otakustay/7044212 to your computer and use it in GitHub Desktop.
Save otakustay/7044212 to your computer and use it in GitHub Desktop.
javascript enum type
/**
* ADM 2.0
* Copyright 2013 Baidu Inc. All rights reserved.
*
* @file 常量枚举类
* @author wangyaqiong(catkin2009@gmail.com)
* @date $DATE$
*/
define(
function () {
function Enum() {
this.valueIndex = {};
this.aliasIndex = {};
this.textIndex = {};
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (element.value == null) {
element.value = i;
}
this.addElement(element);
}
}
Enum.prototype.addElement = function (element) {
if (this.hasOwnProperty(element.value)) {
throw new Error(
'Already defined an element with value'
+ element.value + 'in this enum type'
);
}
this[element.value] = element.alias;
this[element.alias] = element.value;
this.valueIndex[element.value] = element;
this.aliasIndex[element.alias] = element;
this.textIndex[element.text] = element;
};
Enum.prototype.fromValue = function (value) {
return this.valueIndex[value];
};
Enum.prototype.fromAlias = function (alias) {
return this.aliasIndex[alias];
};
Enum.prototype.fromText = function (text) {
return this.textIndex[text];
};
Enum.prototype.getTextFromValue = function (value) {
return this.fromValue(value).text;
};
Enum.prototype.getTextFromAlias = function (alias) {
return this.fromAlias(alias).text;
};
Enum.prototype.getValueFromAlias = function (alias) {
return this.fromAlias(alias).value;
};
Enum.prototype.getValueFromText = function (text) {
return this.fromText(text).value;
};
Enum.prototype.getAliasFromValue = function (value) {
return this.fromValue(value).alias;
};
Enum.prototype.getAliasFromText = function (text) {
return this.fromText(text).alias;
};
var exports = {};
exports.Enum = Enum;
exports.Status = new Enum(
{ alias: REMOVE, text: '删除' },
{ alias: RESTORE, text: '启用' },
{ alias: STOP, text: '停用' }
);
return exports;
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment