2013-07-24 136 views
0

我已經在JavaScript中定義了以下枚舉:如何使用枚舉來定義另一個枚舉?

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

現在我想要定義另一個枚舉文檔類「發票」和「信用票據」。我試過這樣的事情。:

/** 
* 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

這應做到:

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(); 
} 
+0

所以,我必須檢查'DOCUMENT_CLASS.INVOICE [1]'和'DOCUMENT_CLASS.INVOICE [3]'如果我想知道它是否是發票? –

+1

'DOCUMENT_CLASS.INVOICE'是一個對象,不是一個整數;它有兩個鍵,1和3.你不必檢查兩個鍵,你只是檢查你給的值;如果存在,那就是發票。 – Barmar

+0

謝謝,'DOCUMENT_CLASS.INVOICE [columnDataProvider]'工作,但有沒有更好的解決方案,所以我可以檢查'if(DOCUMENT_CLASS.INVOICE)'? –