JavaScript可扩展枚举封装
枚举结构
通常我们定义的枚举值:
var SizeEnum = { SMALL: 1, MEDIUM: 2, LARGE: 3, };
使用var mySize = SizeEnum.SMALL;
如果需要包含其他属性,我们可以添加额外的对象
var SizeEnum = { SMALL: 1, MEDIUM: 2, LARGE: 3, properties: { 1: {name: "small", value: 1, code: "S"}, 2: {name: "medium", value: 2, code: "M"}, 3: {name: "large", value: 3, code: "L"} } };
使用:
var mySize = SizeEnum.MEDIUM; var myCode = SizeEnum.properties[mySize].code; // myCode == "M"
封装
下面我们进行封装:
/** * 枚举类 * * @author harris.xc * @param props [{key: number|string, value: number|string, ...other}] * 栗子: * const StepEnum = new Enum([ * { key: 'STEP1', name: '步骤1', value: 1 }, * { key: 'SETP2', name: '步骤2', value: 2 }, * ]); * * @class Enum * * @method get(value) 通过value获取当前列的值 * return { key: 'SETP2', name: '步骤2', value: 2 } * * @returns {key1: number|string, key2: number|string} * { * CREATE: 1, * APPROVED: 2, * } */ export default class Enum { /** * 初始化 * @param {Array} props [] */ constructor(props = []) { this.__props = {}; if (props.length) { props.forEach((element) => { if (element.key && element.value) { this[element.key] = element.value; this.__props[element.value] = element; } else { console.error('Enum缺少必要的key或value'); } }); } } /** * 根据value获取对象值 * @param {string|number} value 状态值 */ get(value) { return this.__props[value]; } /** * 获取枚举数组 */ getArray() { const arr = []; for (const key in this.__props) { if (Object.prototype.hasOwnProperty.call(this.__props, key)) { arr.push(this.__props[key]); } } return arr; } }
使用方法:
let SizeEnum = new Enum([ { key: 'STEP1', name: '步骤1', value: 1 }, { key: 'SETP2', name: '步骤2', value: 2 } ]); SizeEnum.STEP1; // 1 SizeEnum.get(SizeEnum.STEP1); // { key: 'STEP1', name: '步骤1', value: 1 }
相关推荐
wikiwater 2020-10-27
IdeaElements 2020-08-19
Sophiego 2020-08-16
Kakoola 2020-08-01
Kakoola 2020-07-29
ELEMENTS爱乐冬雨 2020-07-18
ELEMENTS爱乐小超 2020-07-04
ELEMENTS爱乐小超 2020-07-04
Kakoola 2020-06-28
Feastaw 2020-06-18
Wmeng0 2020-06-14
ELEMENTS爱乐冬雨 2020-06-14
云之高水之远 2020-06-14
哈喽elements 2020-06-14
Feastaw 2020-06-11