2017-08-13 6 views
0

Node.jsのJavaScript ES6で静的クラスのプライベートプロパティを定義するベストプラクティスの方法は何ですか?JavaScriptで静的クラスのプロパティを定義する

私は、次のLogクラスを持っている:

'use strict'; 

const moment = require('moment'); 
const LOG_DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSZ'; 

module.exports = class { 
    static debug(txt) { 
     console.log(`${moment().utc().format(LOG_DATE_FORMAT)} [debug] ${txt}`); 
    } 

    static info(txt) { 
     console.info(`${moment().utc().format(LOG_DATE_FORMAT)} [info] ${txt}`); 
    } 

    static warn(txt) { 
     console.warn(`${moment().utc().format(LOG_DATE_FORMAT)} [warn] ${txt}`); 
    } 

    static error(txt) { 
     console.error(`${moment().utc().format(LOG_DATE_FORMAT)} [error] ${txt}`); 
    } 
}; 

は、これを行うための正しい方法をmodule.exportsmomentDATE_FORMAT外側を定義するため、クラス定義されていますか?

+0

はい、これは許容できる方法です。複数の関数間でいくつかの変数を共有しているので、すべての関数がそれらにアクセスできるように、それらをより高いスコープで定義する必要があります。 – jfriend00

+0

変数をエクスポートしないのはなぜですか? – wrangler

答えて

1

はい、これは問題ありません。あなたは接頭辞としてクラス名を使用してそれらを参照できるように

  1. もクラスの静的としてそれらを定義します。あなたはすべてのあなたの静的メソッドの間で共有するいくつかの変数を定義したいので、あなたは基本的に4つの選択肢があります。これには、エクスポートされたクラスで一般にアクセスできるようにする利点(欠点に応じて)や欠点があります。

  2. これまでのモジュールレベルの変数として定義します。これにより、すべての静的メソッドからアクセスできるようになりますが、モジュールでの使用は非公開になります。

  3. それぞれを別々に再定義します。

  4. グローバルとして定義します。

オプション3は、多くの反復のようであり、確かに非常にドライではありません。

オプション#4は、これらのグローバルを作成する理由がないため、いい方法ではありません(とにかくnode.jsでグローバルを使用することはほとんどありません)。

したがって、オプション#1または#2になります。これは、モジュールの外部で値にアクセスできるかどうかによって完全に選択できます。それらをエクスポートしたい場合は、クラスの静的プロパティを作成し、クラス接頭辞を付けてそれらを参照してください。あなたがモジュール内でそれらを使いたいだけなら、あなたがしたことは完璧です。

+0

@Justin - これはあなたの質問に答えましたか? – jfriend00

関連する問題