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對象就此出現了!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM