2012-04-05 8 views
8

出会いについて混乱が、それを理解することができませんでした。コードの行を以下のこのJavaScriptパターン

この(/ ... /)(これは)何ですか。目的はjavascriptですか?このパターンの名前はありますか?

コード以下の通り:

//Move.js 
(function(exports){ 
    exports.Move = function(){ 

    }; 
})(this); 
+0

これをチェック意味クラスまたはオブジェクトではなくコンテキストです。とにかく任意のjavascript関数を呼び出すことができますし、このdinamicallyの値を変更することができます。その例では、関数を作成してすぐに呼び出し、この値をエクスポート引数に代入するだけです。ナットヒールでは関数定義であり、これをパラメータとして呼び出す関数です。 – mpm

+0

@ camus-これは非常に混乱した説明です。関数の* this *値は実際には動的ではなく、関数が呼び出される方法によって設定され、後で変更することはできません。 – RobG

+0

あなたも私を読めば、私は動的であり、関数のコンテキストについて話しました。これは実際には1つの値に設定されていないため動的ですが、関数の呼び出し方法によって異なります。説明はかなり明確です。これは1つのコンテキストを参照しないため、動的です。 – mpm

答えて

5

このパターンは "Immediately Invoked Function Expresssion" です。つまり、すぐに実行される関数なのです。最後にthisはあなたの例ではexports

(function(exports){ 

    //that was "this" outside, is now "exports" in here 

}(this)); 

としてアクセスされる内部機能に送られるパラメータであり、私たちはどんなthisが、それはMoveメソッドを追加されているいくつかのオブジェクトのされたと仮定することができますそれに。

このパターンは、「包含環境」を作成する意味で、このパターンを「Module Pattern」と呼んでいるため、新しい機能スコープのためにその内部のものが表示されないようになっています。言い換えれば、どのような内部では、外を見ているが、外側は内側のみが、それはこのパターンは、「モジュール・パターン」と呼ばれている

+0

これはモジュールパターンの例ではなく、ただちに呼び出される関数式(IIFE)です。これは、プロパティ、メソッド、およびクロージャを介した「プライベート」メンバーへのアクセスを持つオブジェクトを返すためにモジュールパターンとともに使用されます。 – RobG

+0

*私のコードはモジュールパターンの例です。上のコードは、関数内で ''エクスポート 'になっていることを示しています。誰もが独自のスタイルを構築しているので、私はモジュールパターンの例を含めませんでした。 – Joseph

+0

ええと。私はそれについて考えるとき。上記のコードでは、var exports = function(){// bla}とは何が違うのですか? – TonyTakeshi

3

そのパターンは、単にexportsは、実行時にthisに割り当てられます。

グローバルスコープとブラウザを想定すると、thiswindowオブジェクトを指します。

これらの前提を念頭に置いて、window.Moveには、そのIIFE(Immediately Invoked Function Expression)内に割り当てられた関数が含まれている必要があります。この関数はthisないwindowある別のコンテキストで呼び出された場合

することは、それが外部環境にあったものは何でもthisにそのメソッドを割り当てます。

+0

おそらくグローバルコードでは、* this *は常にグローバルオブジェクトを参照していると言えます。いくつかの環境(ブラウザなど)では、本質的に同じオブジェクト(ただし、そうでないかもしれない)である*ウィンドウ*オブジェクトも存在するため、グローバルコンテキストでは* this *も参照されます。 – RobG

1

を見ることができますかを見ることができます。さまざまなサブパターンがあり、これには拡張モジュールパターンが使用されています。

まず、モジュールをインポートしてプロパティを追加してから、 をエクスポートします。ここでは上から私たちのMODULEを増強、例を示します

このモジュールのパターンについての詳細読み取りのための一般的なJavascriptのパターンについての詳細読書についてhttp://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

をチェックアウトするJavaScriptのdoesntで http://addyosmani.com/resources/essentialjsdesignpatterns/book/

+0

http://addyosmani.com/resources/essentialjsdesignpatterns/book/非常に良い、詳細で、多くの例では、絶対にお読みください! – sMyles

関連する問題