2017-03-24 10 views
2

私はに似て列挙型を追加することができます場合はお願いしたいと思います。クラス内JavascriptをES6静的な列挙型のように外側に使用されるクラス内の列挙型は

STATES = { 
    WIP: "Work in progress", 
    ONLINE: "Online", 
    ONLINE_MODIFIED: "Online, modified", 
    HIDDEN: "Hidden" 
} 

を、そしていくつかにそれを使用することが可能他のファイルは次のようなものがあります。boxObject.updateState(new Box().STATES.HIDDEN)

のように、object.updateState(Class.STATES.HIDDEN)のような新しいオブジェクトを作成する必要はありません。

このような
+4

が、なぜあなたがそれをやりたいのでしょうか?代わりに 'export const STATES = {...};'を使用します。そして、必要な場所で他のファイルにインポートすることができます。 – nils

答えて

4

:あなたは複数の方法で静的データの特性を達成することができます

export class Foo{} 
Foo.SomeStaticEnum={BAR:"bar"}; 

が、constのをエクスポートすることは、より適切と思われる...

export const FOO={BAR:"bar"}; 
+0

ごめんなさい。質問が投稿されてからわずか数分で問題を解決しました。次の人のより詳細な答えにもかかわらず、チェックマークが表示されます。 –

9

使用の割り当て

const STATES = { 
    WIP: "Work in progress", 
    ONLINE: "Online", 
    ONLINE_MODIFIED: "Online, modified", 
    HIDDEN: "Hidden" 
}; 

class Box {}; 

Box.STATES = STATES; 
console.log(Box.STATES.WIP); // Work in progress is the output 

使用Object.defineProperty

あなたがにES6静的ゲッター構文​​を使用することができます:あなたはObject.definePropertyを使用する場合

あなたはそれが読み取り専用

const STATES = { 
    WIP: "Work in progress", 
    ONLINE: "Online", 
    ONLINE_MODIFIED: "Online, modified", 
    HIDDEN: "Hidden" 
}; 

class Box {}; 

Object.defineProperty(Box, 'STATES', { 
    value: STATES, 
    writable: false, // makes the property read-only 
}); 

console.log(Box.STATES.WIP); // Work in progress is the output 

使用静的ゲッターを作ることができますクラス定義にプロパティを追加します。読み込み専用にしてゲッターだけを定義することもできます。

const STATES = { 
    WIP: "Work in progress", 
    ONLINE: "Online", 
    ONLINE_MODIFIED: "Online, modified", 
    HIDDEN: "Hidden" 
}; 

class Box { 
    static get STATES() { 
    return STATES; 
    } 
} 

console.log(Box.STATES.WIP); // Work in progress is the output 

これらのことはすべて、n00dl3に同意します。あなたはES6モジュールを使用している場合は、名前のエクスポートを使用すると、よりappropiateのようだ:

export const BOX_STATES = { 
    WIP: "Work in progress", 
    ONLINE: "Online", 
    ONLINE_MODIFIED: "Online, modified", 
    HIDDEN: "Hidden" 
}; 

export default class Box {}; 

だから、あなたはこのようにそれをインポートすることができますことが可能であることを

+0

しかし、constは誤解を招く可能性があります。まだBOX_STATES.WIP = 'Wowy impowtant pewson'をエラーなしで行い、 "constant"の値を変更することができます。 –

関連する問題