モジュールは、強力なアプリケーションの不可欠な部分であり、多くの場合、プロジェクトでコードユニットを明確に分離および整理するのに役立ちます。
JSにモジュールを実装する方法:
1。オブジェクトリテラル表現
2.モジュールモード
3。AMDモジュール
4。CommonJSモジュール
5.ecmascriptハーモニーモジュール
オブジェクトリテラル
オブジェクトリテラルは、新しいオペレーターを使用してインスタンス化する必要はありませんが、声明の先頭にはブロックの開始として解釈される可能性があるため、ステートメントの冒頭で使用することはできません。オブジェクトの外では、次の課題ステートメント、mymodule.property = "somevalue"を使用して、新しいメンバーをリテラルに追加できます。
var mymodule = {myproperty: "somevalue"、myconfig:{usecaching:true、language: "en"}、//基本的な方法mymethod:function(){// ...}、//現在の構成mymethod2:function(){console.log( " 「有効」:「無効」); }、//現在の構成mymethod3:function(newconfig){if(typeof newconfig === "object"){this.myconfig = newconfig; console.log(this.myconfig.language); }}、}; mymodule.mymethod3({言語: "fr"、usecaching:false})オブジェクトリテラルを使用すると、コードをカプセル化して整理することができます。
JavaScriptでは、モジュールパターンを使用してクラスの概念をさらにシミュレートします。この方法では、別のオブジェクトがパブリック/プライベートの方法と変数を持つことができ、それによりグローバルな範囲から特別な部分をブロックします。
モジュールパターンは、閉鎖を使用して、「プライベート」な状態と組織のカプセル化を行います。これは、パブリック/プライベートの方法と変数の組み合わせをラップして、他の開発者のインターフェイスとのグローバルな範囲や競合へのリークを防ぐ方法を提供します。このモードを介して、パブリックAPIを返すだけで、他のすべてはプライベート閉鎖で維持されます。
モジュールモードでは、閉鎖の存在により、宣言された変数とメソッドはモード内でのみ利用可能ですが、外部ユーザーが返すオブジェクトで定義されている変数とメソッドは利用可能です。
モジュールモードの実装
var testModule =(function(){var counter = 0; return {incrementCounter:function(){return ++ counter;}、resetcounter:function(){console.log( "conter value before reset" +counter " +counter);}}}})(); testmodule.resetcounter();コードのもう1つの部分は、IncrementCounter()およびResetCounter()を直接読み取ることができないことです。カウンター変数は実際にはグローバルスコープから完全に分離されているため、範囲にアクセスできるコードはこれらの2つの機能であるため、モジュールの閉鎖に限定されているプライベート変数のように機能します。上記の方法は名前空間を効果的に設定しているため、テストコードでは、すべての呼び出しをプレフィックスする必要があります。
//名前空間、パブリック、プライベート変数を含むモジュールモードvar mynamspace =(function(){// private counter variable var myprivatevar = 0; // private function var myprivatemethod = function(foo){console.log(foo);}; return {// public vublicvar: mypublicfunction:function(bar){myprivatevar ++(bar)}});参照グローバル変数
JavaScriptには、暗黙的なグローバル変数と呼ばれる機能があります。変数が使用されているかどうかに関係なく、JavaScriptインタープリターはスコープチェーンを逆転させて、変数全体のVAR宣言を見つけます。 VARが見つからない場合、通訳者は変数がグローバル変数であると想定しています。変数が割り当て操作に使用されている場合、それが以前に存在しない場合、インタープリターは自動的に作成します。これは、匿名の閉鎖で使用またはグローバル変数の作成が非常に簡単であることを意味しますが、特にコードを読む人が多くの変数がグローバルであり、ローカルなものを区別する場合、コードを管理が難しいことです。
幸いなことに、匿名関数では、比較的単純な代替手段を提供できます。グローバル変数をパラメーターとして匿名関数に渡して使用できます。暗黙のグローバル変数と比較して、それは明確で高速です。例を見てみましょう:
//グローバルモジュールvar mymodule =(function(jq、_){function privatemethod1(){jq( "。container")。html(test);} return {publicmethod:function(){privatemethod1();}}})(jquery、_); mymodule.publicmethod(); // global module var mymodule =(function(){// module object var module = {}; privatevariale = "hello"; function privatemethod(){//...} module.publicproperty = "foobar"; module.publicemethod = cuntemethod = cuntemethod = cuplicemethod = untule();グローバル変数を実装せずに宣言し、グローバル紹介の概念もサポートできます
モジュールモードにはまだ特定の欠点があります。
1.パブリックメンバーとプライベートメンバーに異なる方法でアクセスするため、可視性を変更したい場合は、実際にそのメンバーを使用した各存在を変更する必要があります。
2。後でメソッドに追加されたプライベートメンバーにアクセスすることはできません。
3.プライベートメンバーの自動単位テストを作成できず、バグを修正する必要がある場合は追加の複雑さが追加されます。
4.開発者はプライベートな方法を簡単に拡張できません
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。