zoukankan      html  css  js  c++  java
  • 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对象就此出现了!!!

  • 相关阅读:
    【bzoj 1143】[CTSC2008]祭祀river
    【SRM-09 B】撕书II
    【刷题记录】BZOJ-USACO
    【noip 2014】提高组Day2T3.华容道
    【noip 2012】提高组Day2T3.疫情控制
    【noip 2012】提高组Day1T3.开车旅行
    点分治
    2—SAT问题
    生成树
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/doublenet/p/4390817.html
Copyright © 2011-2022 走看看