11

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

モジュールパターンサンプル: 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);

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

どちらも、シングルトンに対してパブリック/プロトタイプメソッドを1回定義し、オブジェクトの複数のインスタンス/クローンに対して複数回定義します。

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

4

2 に答える 2

18

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

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

それを除けば、違いは見られません。

于 2012-11-28T18:48:13.620 に答える
0

特別な違いはありません。しかし、この例のモジュール パターンのポイントが何なのかわかりません。モジュールにコンストラクターを含める必要はありません。コンストラクターは、2 番目のスタイルのように使用する必要があります。ただし、インスタンスごとにメソッドを定義する必要がない限り、プロトタイプ オブジェクトでメソッドを定義することをお勧めします。

繰り返しになりますが、ここでのモジュール パターンは適切な方法ではないと思います。

于 2012-11-28T19:03:28.180 に答える