相違

2016-08-22 8 views
6

セットアップ: 相違

新規CommonJSに

  • BabelJS(es2015、反応し、ステージ1)
  • のWebPACK
  • が反応/ ReduxのおよびES6。私は、オブジェクトインスタンスとメソッドの静的コンテナの違いを知っていますが、モジュールに分割されたときにそれらがどう振る舞うかはわかりません。だから私は、インスタンスを返すの違いは何だろう(すべてで有効なこのパターンです?):

    // StateParser.js 
    
    class StateParser { 
        constructor() { 
        } 
    
        method1() { 
         ... 
        } 
    
    } 
    
    export default new StateParser() 
    

    とconstのメソッドのエクスポート:

    // StateParser.js 
    
    let state = { 
    } 
    
    export const method1 =() => { ... } 
    
    1. 方法A:新しいがあるでしょうがインポートするたびにインスタンス?
    2. 方法B:

      import { method1 } from '../utils/StateParser.js'; 
      

      し、それがローカルに存在するかのよう法1を使用します。利点の一つは、オブジェクトの構造化代入を使用する機能ですか?

    3. メソッドA:コンストラクタで状態を初期化することの利点の1つはありますか?

    基本的に私はどのユーティリティクラスを使用するのかよく分かりませんし、入力に感謝します。

答えて

8

私はAをインポートするたびに新しいインスタンスがありますか?

いいえ、モジュールは1回だけ評価されます。

Bの利点は、オブジェクトの破壊を使用し、method1をローカルに存在するかのように使用できることですか?

はい、「破壊」とは呼ばれませんが、それらはという名前のインポート(またはという名前のモジュールのエクスポートという名前の)であり、エイリアシングのために別の構文をネストして使用しません。

Aの利点の1つは、コンストラクタで状態を初期化できるかどうかです。

いいえモジュールスコープで直接モジュール状態を初期化することもできますが、そのためのコンストラクタ関数は必要ありません。

しかし、インスタンスに状態がある場合は、というインスタンスを複数回インスタンス化できるクラスを使用することをお勧めします。そのためには、インスタンスではなくクラス自体をエクスポートする必要があります。

export default new …パターンはまったく有効ですか?

いいえ、上記の理由から、反パターンです。クラスが他の場所で使用されているとすれば、それはanonymous class反パターンと非常に似ています。とにかくデフォルトのエクスポートオブジェクトより複数の名前付きエクスポートis much betterをエクスポートする。