2016-03-26 12 views
0

this awesome answerのおかげで、JavaScriptアプリケーション(シングルページ)にシングルトンパターンのようなものを置くことができました。残念ながら、私はまだこれが実際にどのように動作するかを理解することにはまだ問題があります。これは、require()の呼び出しが実際にどのように詳細に機能するかを実際には理解していないことに関連している可能性があります。JavaScript:モジュールベースのシングルトンパターンを理解する

リンク答え引用する:

最初のモジュールに必要で、それをロードし、エクスポートします。あなたのシングルトンを必要とする他のモジュールでは、すでにエクスポートされているものだけを再利用します。

define(function (require) { 
    var singleton = function() { 
     return { 
      ... 
     }; 
    }; 
    return singleton(); 
}); 

だからプロセスは以下のように、ちょうど私がそれを理解していることを確認することです(まだ引用)。何か問題があれば、プロセス記述を修正してください。

モジュールAでは、私はシングルトンモジュールを引きます。

このモジュールの内部には、オブジェクトを返す関数が定義されています。モジュールのreturn/export値は、その関数の結果です。

モジュールBでは、私もrequireシングルトンモジュールを使用し、シングルトンが最初にrequireだったときに作成された同じオブジェクトを取得します。

シングルトンのデータは、最初と次の間でどこに必要ですか?

私はこのオブジェクトの共有の仕組みを理解できませんが、私はいつもrequireを「バーチャルペースト」と考えましたが、これはかなり間違っているようです。実際に何が起こっていますか?

答えて

0

あなたのコードは、シングルトン以上の静的インスタンスに似ています。あなたのコードは、「試験」と呼ばれるファイルに住んでいたし、私はこれをしなかった場合:上記の行の実行時に

var myFunc = require('./test'); 

、myFuncというあなたのコード内で定義された関数になります。

define(function(require){ 
    return (function() { 

     // Instance stores a reference to the Singleton 
     var instance; 

     function init() { 

     // Singleton 

     // Private methods and variables 
     function privateMethod(){ 
      console.log("I am private"); 
     } 

     var privateVariable = "Im also private"; 

     var privateRandomNumber = Math.random(); 

     return { 

      // Public methods and variables 
      publicMethod: function() { 
      console.log("The public can see me!"); 
      }, 

      publicProperty: "I am also public", 

      getRandomNumber: function() { 
      return privateRandomNumber; 
      } 

     }; 

     }; 

     return { 

     // Get the Singleton instance if one exists 
     // or create one if it doesn't 
     getInstance: function() { 

      if (!instance) { 
      instance = init(); 
      } 

      return instance; 
     } 

     }; 

    })(); 
} 

チェックアウト:そうのように要求されるまで

しかし、本当のシングルトンが開始されていないhttps://addyosmani.com/resources/essentialjsdesignpatterns/book/#singletonpatternjavascript

関連する問題