JavaScript 類別物件(6)- 建立列舉型別物件


在某些情形下,你或許會想要建立列舉形態的類別,例如你可能想實作一個收集 12 星座資料的管理類別,考慮以下的資料配置:

var constellation = {
            Aries: '白羊座',
           Taurus: '金牛座',
            Gemini:'雙子座' ,
            Cancer: '巨蟹座'    ,
            Leo:'獅子座',
            Virgo: '處女座',
            Libra:'天秤座' ,
            Scorpio: '天蠍座' ,
            Sagittarius: '射手座' ,
            Capricorn:'魔羯座' ,
            Aquarius:'水瓶座' ,
            Pisces: '雙魚座'
        };

其中儲存了十二星座的拉丁英文名稱與中文對照,現在我們要建立一個類別,並以將每一個星座的的拉丁英文名稱設定為此類別屬性,如此可以透過此類別引用屬性名稱,即可取出對應的中文星座名稱。

function enums(eo) {
var enums = function () { };
for (var key in eo) {
         var enumObject = new enums();              
         enums[key] = eo[key];
}
return enums;
}

一開始宣告一個函式物件變數,用來建立所需的宣告類別,然後將傳入的參數eo依序取出內容,分別將 key 與 key對應的值,設定成為 eunms 的新屬性,如此一來便能透過屬性值進行對應值的存取。

var constellationEnum = new enums(constellation);
console.log('Taurus' + constellationEnum.Taurus);
console.log('Virgo' + constellationEnum.Virgo);
console.log('Sagittarius' + constellationEnum.Sagittarius);
console.log('Pisces' + constellationEnum.Pisces);

接下來這一段程式碼以 new 建立一個 enums 物件,並且將上述儲存星座資料的物件傳入,接下來即可引用對應的屬性,回傳其中文星座名稱。以下為上述程式碼的輸出結果:

Taurus:金牛座
Virgo:處女座
Sagittarius:射手座
Pisces:雙魚座

如你所見,對於某些具關聯性的常數型態資料,透過列舉進行組織,是很好的作法。



沒有留言: