2012-03-17 7 views
2

を提供使って:https://developers.google.com/closure/library/docs/tutorial と、それは私は私がチュートリアルを読んでいるクロージャでは非常に初心者、 よ閉鎖ライブラリに

goog.provide('tutorial.notepad.Note'); 

がオンに基づか

tutorial = tutorial || {}; 
tutorial.notepad = tutorial.notepad || {}; 
tutorial.notepad.Note = tutorial.notepad.Note || {}; 

と等価であることを述べていますその事実、私は使用する場合、それを仮定しますgoog.provide('tutorial.notepad.Note');

次に使用する必要はありませんgoog.provide('tutorial.notepad);

しかし、この例では両方を一緒に使用しています。 誰かがなぜ私に説明するかもしれない?

答えて

1

goog.provide(namespace)は、左から始まる各ドット区切りの名前をチェックし、上で指定したtutorialに相当する新しいオブジェクトリテラルを指すプロパティを作成します。したがって、notepad.jsgoog.provide('tutorial.notepad')を技術的に含める必要はありません。goog.provide('tutorial.notepad.Note')はオブジェクトチェーンtutorial.notepadが存在することを保証します。

しかし、メンバ関数makeNoteDomNoteオブジェクトの定義に加えて、notepad.jsもtutorial.notepad名前空間のメンバーである効用関数makeNotesを定義します。 goog.provide(tutorial.notepad)を含めると、notepad.jsはNoteオブジェクトの定義に加えてパッケージレベルの機能を提供することを示します。

+0

ありがとうcpeisert。どうして彼らのチュートリアルにコメントを追加する能力がないのか分かりません。それは大きな利益をもたらし、そのような質問をカバーするでしょう。 –

+0

@cpeisertだから、常にネームスペースを定義するのは賢明でしょうが、オブジェクトは含めません。たとえば、tutorial.notepad.Noteがnotepad.jsで宣言され定義されていたとしても、単純にgoog.provide( 'namespace.notepad'); ?? –

+0

@ rodrigo-silveira [Closure Library code](https://code.google.com/p/closure-library/source/browse/#git%2Fclosure%2Fgoog)を勉強することをおすすめします。ネームスペースは、ほとんどの場合、 'goog.provide'とそれに続く' goog.provide'ステートメントを使って、同じファイル内の名前空間内で定義された各オブジェクトに対して宣言されています。 –

関連する問題