2016-08-03 7 views
1

コンストラクタと同じ方法でパラメータをモジュールに渡す方法はありますか?モジュールパターンのコンストラクタパラメータ

私が見つけた答えは、セッター機能を示唆しているようでした。これは、私のモジュールはグローバル変数に依存するロジックを持つため、setterは "un-set"変数に依存するコードでインスタンス化されていないと呼び出せないため、私にとってはうまくいかないでしょう。

具体的には、私は、d3グラフを一般的に役に立つようにモジュール化しようとしており、データ配列パラメータでモジュールをインスタンス化できるようにしたいと考えています。

EDIT:d3グラフの場合、モジュールパターンが最も効果的です。

var thing = (function() { 

var a = [1,2,3]; 
var l = a.length; 

var doit = function() { 
    console.log('your array has '+l+' elements'); 
} 
var doit2 = function() { 
    console.log('your array contains: '+a.toString()); 
} 
return { 
    doit: doit, 
    doit2: doit2 
    } 
})(); 

どのように渡すことができます。ちょうど更新機能で、後で渡すことができないデータの引数でインスタンス化する必要は何も...私は、このモジュールを持っている場合、一般的に

でもありませんvar aの代わりに使用する配列?

あなたはこのような何かを行うことができ
+0

'VARの事は=(機能(パラメータ){VAR A = PARAM ;/*等* /})(dataArray); '? – nnnnnn

+0

* '設定されていない変数'に依存するコードでモジュールがインスタンス化されていなければ、setterを呼び出すことはできません。*あなたのサンプルモジュールでは '.init()'やsetterメソッドを追加することに問題はありません。 'a'をデフォルトで空の配列に設定し、' .init() 'またはsetterメソッド内の* real *の値に設定することができます。クライアントコードが' doit() 'を呼び出さずに' .init() 'それはそれが値するものを得るでしょう。 – nnnnnn

+0

静的なグローバルシングルトンであるモジュールの場合、それをIIFEへの引数として渡すか、単純にボディの中に入れるかは違いありません。再利用可能にするには、代わりにファクトリまたはコンストラクタ関数にします。 – Bergi

答えて

1

(生命維持がドロップアウトに注意):次に

var thingCreator = function (param) { 
    // your code 
    return { 
     // your module object 
    }; 
}; 

好きそれを呼び出す:

var thing = thingCreator(a); 
+0

これはうまくいくと思いますが、これは実際にはファクトリ関数ですか? – oraz

+0

これは単なるファクトリ関数です。あなたは、値を供給する必要がある時に応じて、IIFEへの引数を渡すこともできます。 – Michael

関連する問題