如何使用枚举来定义另一个枚举?

时间:2013-07-24 10:30:23

标签: javascript enums

我在JavaScript中定义了以下枚举:

/**
 * Represents the document type.
 * 
 * @enum
 */
var DOCUMENT_TYPE = {
    TC_INVOICE: 1,
    TC_CREDIT_NOTE: 2,
    OFFHIRE_INVOICE: 3,
    OFFHIRE_CREDIT_NOTE: 4
}

现在我想为文档类“invoice”和“credit note”定义另一个枚举。我试过这样的事情。:

/**
* Represents the document class ("invoice" or "credit note").
* 
* @enum
*/
var DOCUMENT_CLASS = {
    INVOICE: {
        1: DOCUMENT_TYPE.TC_INVOICE,
        3: DOCUMENT_TYPE.OFFHIRE_INVOICE
    },
    CREDIT_NOTE: {
        2: DOCUMENT_TYPE.TC_CREDIT_NOTE,
        4: DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE
    }
}

数据库列包含文档类型的值(可能的整数值:1,2,3,4)。现在我想检查它是否是发票或信用票据,如:

if ( DOCUMENT_CLASS.INVOICE ) {
    doSomething();
} else if ( DOCUMENT_CLASS.CREDIT_NOTE ) {
    doSomeOtherThing();
}

1 个答案:

答案 0 :(得分:1)

这应该这样做:

if (DOCUMENT_CLASS.INVOICE[column]) {
    doSometjing();
} else if (DOCUMENT_CLASS.CREDIT_NOTE[column]) {
    doSomeOtherThing();
}

column是一个变量,用于保存您要检查的数据库列中的值。

另一种方法是通过制作文档类数组:

var DOCUMENT_CLASS = {
    INVOICE: [ DOCUMENT_TYPE.TC_INVOICE, DOCUMENT_TYPE.OFFHIRE_INVOICE ],
    CREDIT_NOTE: [ DOCUMENT_TYPE.TC_CREDIT_NOTE, DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE ]
};

然后你会写:

if (DOCUMENT_TYPE.INVOICE.indexOf(column) != -1) {
    doSomething();
} else if (DOCUMENT_TYPE.CREDIT_NOTE.indexOf(column) != -1) {
    doSomeOtherThing();
}