2012-11-28 23 views
5

単一インスタンスと複数インスタンスの観点から、モジュールパターンに続くこれらの余分なコード行を、メソッドとプロパティを定義した標準コンストラクタを使用するだけで書くのはなぜですかコンストラクタ本体で?JavaScriptモジュールパターンvsコンストラクタで定義されたメソッドを持つコンストラクタ

モジュールのパターンサンプル:http://jsfiddle.net/T3ZJE/1/

var module = (function() { 
    // private variables and functions 
    var foo = 'bar'; 

    // constructor 
    var module = function() { 
    }; 

    // prototype 
    module.prototype = { 
     constructor: module, 
     something: function() { 
     } 
    }; 

    // return module 
    return module; 
})(); 

var my_module = new module(); 

console.log(my_module) 


コンストラクタのサンプルは:私にhttp://jsfiddle.net/EuvaS/2/

function Module(){ 

    // private variables and functions 
    var foo = 'bar'; 

    //public methods 
    this.something = function() { 

    }   
} 

var my_module = new Module(); 

console.log(my_module); 

最終的な結果はほとんど同じです。どちらもパブリックプロパティとメソッドを持つことができ、どちらもパブリックメソッドでアクセスできる「プライベート」変数とメソッドを持つことができます。

どちらもシングルトンに対してpublic/prototypeメソッドを一度定義し、両方ともオブジェクトの複数のインスタンス/クローンに対して複数回定義します。

何か不足していますか?違いはなんですか?

答えて

14

最初の例では、fooはmodule()のすべてのインスタンスに共通の静的変数です。つまり、すべてのインスタンスは同じ変数を参照します。

第2の例では、fooはModule()インスタンスごとに異なります。

それ以外は、私は違いは見られません。

+0

これは実際に重要な違いの1つです。 – Fergal

+1

poopsとgigglesの場合、Constructorメソッドをわずかに変更すると、静的private varsが作成され、パブリックメソッドは一度しか定義されず、コンストラクタースコープ内のすべてのprivate varsにアクセスできます。http://jsfiddle.net/zHwQX/2/ – Fergal

+0

@ファルガル良い点は、どちらもそれを見ていない。だから私は全体的な、より多くの機能とより小さなメモリのフットプリントを考えます – Damp

0

特別な違いはありません。しかし、この例ではモジュールパターンのポイントが何であるか分かりません。モジュールにコンストラクタを含める必要はありません。コンストラクターは、2番目のスタイルのように使用する必要があります。しかし、各インスタンスに対してそれを持つ必要がないかぎり、そのプロトタイプオブジェクトでメソッドを定義するほうが良いです。

この場合も、モジュールパターンは適切な方法ではないと私は考えています。

+0

私はここからその抜粋を得ました:http://briancray.com/posts/javascript-module-pattern – Fergal

+0

@Fergal彼の意見が適切かどうかは分かりませんパターン。あなたがモジュールにコンストラクタを持っているあなたの質問で言及したように、余分な作業は不要だと思います。私はメリットは見つけられません。 –

関連する問題