博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在JavaScript中仿真Java的enum
阅读量:6231 次
发布时间:2019-06-21

本文共 2206 字,大约阅读时间需要 7 分钟。

hot3.png

背景

最近开始做的一个项目使用facebook的ReactJS前端框架。发现经常使用react的keyMirror工具来定义一些枚举常量:

var keyMirror = require('keyMirror');var AppMode = keyMirror({    LOG_IN: null,    SIGN_UP: null});module.exports = AppMode;

其他JS代码对该枚举的引用大概如下代码:

var AppMode = require('../const/app_mode');if (curMode == AppMode.LOG_IN) {    ...} else {    ...}...var className = (curMode == AppMode.LOG_IN) ? 'login-form' : 'signup-form';...

这样的代码感觉还行,起码比字串漫天飞舞的情况好很多。不过我发现诸如curMode == AppMode.LOG_IN类型的代码太多了,写起来不太舒服,而且总是要求我require('../const/app_mode'),我希望能简单地写类似于curMode.isLogIn()的代码。所以就搞了这个简单的工具gen_enum:

用法

npm install gen_enum

var createEnum = require('gen_enum');var COLORS = createEnum("blue red");var myColor = COLORS.blue;console.log(myColor._id); // output blueconsole.log(myColor.isBlue()); //output trueconsole.log(myColor.isRed()); //output falseconsole.log(myColor.name()); //output blueconsole.log(myColor.toString()); //output blue

输入: "key1 key2 ..."

注意,除空白以外关键字还可以用,, ; 以及:来分割

输出:

{    key1: {        _id: 'key1',        name: function() {            return 'key1';        },        toString: function() {            return 'key1';        },        isKey1: function() {            return true;        },        isKey2: function() {            return false;        }    },    key2: {        _id: 'key2',        name: function() {            return 'key2';        },        toString: function() {            return 'key2';        },        isKey1: function() {            return false;        },        isKey2: function() {            return true;        }    }}

其他输入形式

使用字串来指定枚举关键字只是一种方式,gen_enum还支持其他两种形式的输入:

// 用字串数组来指定枚举关键字var Color = genEnum("blue", "red");var myColor = Color.blue;// 用Object对象来指定枚举关键字var WeekDay = genEnum({    Monday: null,    Tuesday: null})var myDay = WeekDay.Monday;

关于 CamelCase

gen_enum将大写加下划线的枚举关键字的isXXX函数名转换为CamelCase形式:

var AppMode = genEnum('SIGN_UP, LOG_IN, FORGOT_PASSWORD');var curMode = AppMode.LOG_IN;console.log(curMode.isLogIn()); // 输出 trueconsole.log(curMode.isSignUp()); // 输出 falseconsole.log(curMode.isForgotPassword()); // 输出 false

关于只读(Immutability)

gen_enum使用Object.freeze来锁定返回的枚举结构。如果环境(IE8或更早的版本)不支持Object.freeze,则返回的枚举结构不具备只读特性。

项目地址:

转载于:https://my.oschina.net/greenlaw110/blog/405772

你可能感兴趣的文章
安全观之我见(四):安全无绝对
查看>>
远程在线管理mssql,出现常规网络错误
查看>>
ASA防火墙的基本配置
查看>>
[ 1011 ] 有关文件的操作及图说明
查看>>
PXE网络装机
查看>>
人工智能赢了人类,那又如何?
查看>>
今天客户遇到的一个问题:Linux系统的主机碰上了ARP
查看>>
[Thinking In Java]代码整理之移位操作符(shift operators)
查看>>
windows 8预测版本(x64,x86)下载
查看>>
Android Studio 3.0 之后打包apk出现应用未安装问题
查看>>
我的友情链接
查看>>
为你的AliOS Things应用增加自定义cli命令
查看>>
我的友情链接
查看>>
Ez×××客户端在服务器侧没有配置隧道分离的情况下如何直接上公网
查看>>
如何备份cisco路由器配置文件
查看>>
部署Symantec Antivirus 10.0网络防毒服务器之六
查看>>
《paste命令》-linux命令五分钟系列之二十
查看>>
CTO职场解惑指南系列(一)
查看>>
安排!活动素材的亿级用户精准投放
查看>>
debian8.4下配置pgpool+pg9.5双主备
查看>>