javascript实现与后端相同的枚举Enum对象

 1 ;
 2 (function (global, undefined) {
 3
 4     global.Enum = function (namesToValues) {
 5         var enumeration = function () {
 6             throw "can‘t Instantiate Enumerations";
 7         };
 8         enumeration.setValue = function (x) {
 9             var val = null;
10             enumeration.foreach(function (i) {
11                 if (i.value == x) {
12                     val = enumeration[i.name];
13                 }
14             }, null);
15             return val;
16         };
17
18         function inherit(superCtor) {
19             var f = function () {
20             };
21             f.prototype = superCtor;
22             var ctor = function () {
23             };
24             ctor.prototype = new f();
25             ctor.prototype.constructor = superCtor.constructor;
26             return new ctor;
27         }
28
29         var proto = enumeration.prototype = {
30             constructor: enumeration,
31             toString: function () {
32                 return this.name;
33             },
34             valueOf: function () {
35                 return this.value;
36             },
37             toJSON: function () {
38                 return this.name;
39             }
40         };
41
42         enumeration.values = [];
43
44         for (name in namesToValues) {
45             var e = inherit(proto);
46             e.name = name;
47             e.value = namesToValues[name];
48             enumeration[name] = e;
49             enumeration.values.push(e);
50
51         }
52
53         enumeration.foreach = function (f, c) {
54             for (var i = 0; i < this.values.length; i++) {
55                 f.call(c, this.values[i]);
56             }
57         };
58
59         return enumeration;
60
61     };
62 })(window);
var Qos = window.Enum({
            AT_MOST_ONCE: 0,
            AT_LEAST_ONCE: 1,
            EXACTLY_ONCE: 2,
            DEFAULT: 3
        });

现在我们打印Qos.AT_MOST_ONCE会现实一个对象,但是当我们进行 Qos.AT_MOST_ONCE==1 比较时为true;而且Qos.setValue(1) 与 Qos.AT_MOST_ONCE相同

Qos.AT_MOST_ONCE.toString() -> ‘AT_MOST_ONCE‘ ; Qos.AT_MOST_ONCE.valueOf() -> 1 ; Qos.AT_MOST_ONCE.name -> ‘AT_MOST_ONCE‘ ; Qos.AT_MOST_ONCE .value -> 1;

好,现在一个特点与后端语言特性相同的Enum对象就此出现了!!!

时间: 2024-10-29 19:11:07

javascript实现与后端相同的枚举Enum对象的相关文章

poj1753 Flip Game(枚举Enum+dfs)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1753 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the o

c# 枚举enum

1 定义枚举 enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下,枚举中的每个元素的基础类型的值是int,如果不指定值,则其值以1递增;Days.Sunday 的值为 0,Days.Monday 的值为 1,依此类推. public enum TimeOfDay { Moning=0; AfterNoon=1; Evening=2; } 使用枚举: public string ge

poj2965 The Pilots Brothers&#39; refrigerator(直接计算或枚举Enum+dfs)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=2965 Description The game "The Pilots Brothers: following the stripy elephant" has a quest where a player needs to open a refrigerator. There are 16 handles

C++和Java中枚举enum的用法

在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的命名的实例,你可以自定义枚举的成员,枚举值转化为对应的整型值是再外部进行的.下面以我之前的一篇博客8.1 Implement Blackjack 实现21点纸牌来说明,里面有一个扑克牌花色的枚举类: // C++ defination enum Suit {Club, Diamond, Heart,

Java 语法 索引 ----- 枚举(Enum)

enum Speed { STOP, SLOW, NORMAL, FAST } Speed s = Speed.SLOW; switch(s) { case SLOW: break; } 参考文献: Java Quick Syntax Reference by Mikael Olsson Java 语法 索引 ----- 枚举(Enum)

Lua 与C/C++ 交互系列:动态注册枚举enum到Lua Code中,在运行时在Lua Code中获取内省信息

在Lua 5.1 Reference Manual  对于Lua 值和类型的介绍.Lua是一个动态语言,在Lua中变量仅仅有值而没有类型.所以在Lua中的变量不需要声明.所以的值本身包含类型. 其实Lua 包含一种运行时类型识别,通过type()函数,可以在运行时获取值的类型. 信息来自: Lua 5.1 Reference Manual  Values and Types Lua is a dynamically typed language. This means that variable

mysql数据类型——枚举enum(‘F’,&#39;M&#39;)

ENUM(“value1”,“value2”,...) 说明:枚举,列值可赋予值列表中的某个成员 允许的属性:除通用属性外无其他属性 缺省值:如果列可为NULL,则为NULL:如果列为NOTNULL,则为第一个枚举值 存储需求:对1到255个成员的枚举1个字节,对255到65535个成员的枚举2个字节 比较:不区分大小写(MySQL3.22.1版以前区分大小写) mysql数据类型--枚举enum('F','M')

json数据在前端(javascript)和后端(php)转换

学习目的:前后端数据交换 思路: json数据格式是怎么样? 后端各种语言怎么将自己内容转换成json格式的内容? 前端怎么接收json数据?有几种方式? js中怎么将json数据转换成js中的数组,对象来使用? 遇到问题: 用ajax接收数据直接赋值给了变量,发现里面是一个数组. 在php中不知道怎么传递数据?(或者说ajax的xmlhttp.responseText是怎么获取后端数据的?) php中把对象和数组转换成json数据格式的方法. 学习过程: 1.json知识普及 从结构上看,所有

2017年 JavaScript 框架回顾 -- 后端框架

本文是2017年 JavaScript 框架回顾系列的最后的一篇文章,主要介绍 JavaScript 的后端框架情况. 从上图中可以看到,Express 作为用 JavaScript 编写的后端服务的主流解决方案,占据了后端框架使用率的绝大部分,其次的四个最大框架对比于 Express 来说,占用率都很小. 到目前为止,我们所讨论的几乎所有框架的绝对使用量都在不断增加.自2013年以来,Express 的使用率已经增长了6000%.之所以 Express 的6000%增长在第一张图中显示成下降的