你的位置:首页 > Java教程

[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对象就此出现了!!!