オブジェクト
全てのJSは、次のような、オブジェクトことが理解され得る場合、配列、機能、オブジェクト、等
クロージャ
1.定義と原則
多くの変数とこれらの環境変数の表現(通常の機能)を持っているにバインドされ閉鎖
閉鎖スコープチェーンの外部およびグローバル変数にアクセスできる内部機能を使用して変数、外部関数は内部変数機能にアクセスすることはできません
したがって、関数内の関数の定義は、関数内の関数は、関数内の変数にアクセスするには、変数は、メモリに記憶され
以下、nはF2に対してグローバル変数であり、例としては、F1に応じてF2、次いで、(実際F1)が実行されている、n個のメモリに記憶された継続がクリアされていません
NADD機能を実行した後、Nは1000となります
1つの 関数F1(){ 2 VAR N- = 999 ; 。3 NADD = 関数(){ 4 N- = N + 1 ; 5 } 6。 関数F2(){ 7。 アラート(N-); 8 } 9。 戻りF2; 10 } 11。 VAR = A F1(); 12である(); // ポップ999 13である NADD(); 14 A(); //は1000ポップ
2.使用方法
閉鎖機能を読み出す関数内のローカル変数、およびメモリに格納された関数内のように、ローカル変数の使用
3.長所と短所
長所:カプセル強い、ローカル変数
短所:ローカル変数の長いメモリ、メモリリークが発生しやすいです
パッケージ
1.定義と原則
ただ、特別なアクセスインターフェイスの対象外に隠されたオブジェクトの内部データや動作の詳細、
JS、効果を達成するために、パッケージの閉鎖の使用
呼び出された関数内のローカル変数のネストされた関数にアクセスするための機能実装方法、特権方法
1 関数F1(){ 2 VAR N = 1 ; 3。 // F2ファンクションは、ユーザが関数の外にアクセスすることを可能にするN、特権のための方法場所 4。 この .f2 = 関数(){ 5 はconsole.log(++ N) 6 } 7 // 次の方法と同等 8。 関数F2を(){ 9 はconsole.log(++ N-); 10 } 11 リターンF2; 12である } 13は、 VaRの A = F1(); 14()。
2.欠点
パッケージには、メモリを占有継承を助長されていません
宣言的オブジェクト
1.リテラル
VaRは、直接オブジェクトを宣言し、{}、属性値、関数(メソッド)にプロパティ名を書きます
属性名は引用符が必要な場所があります
1 VARの MyInfoの= { 2 '名称': 'qtfy' 、 3 '年齢':24 、 4 '趣味':関数(){ 5 はconsole.log( "私は歌が好き" )。 6 } 7 }
2.コンストラクタ
Statementオブジェクトのオブジェクトで構成ヴァール、オブジェクト名でプロパティとメソッドを追加します。名=属性値を属性
1つの VARのこのmyobj = 新しいオブジェクト(); 2 myobj.name = 'qtfy' 。 3 = 24 myobj.age 。 4 myobj.hobby = 関数(){ 5 はconsole.log( "I likeに歌います" )。 6 }
3.コンストラクタ
関数とそのパラメータの定義は、これがこの関数の内部で関数を指し、パラメータは、属性値を追加するために渡されます
サンプルをビルドするには一度定義され、機能
1つの 機能テスト(名前、年齢、趣味){ 2 本 .nameの= 名前。 3 この .age = 年齢; 4 本 .interest = 関数(){ 5 はconsole.log(+ '趣味である' 趣味)。 6 } 7 } 8 VARの人= 新しいテスト( 'qtfy'、24 '歌')。
4.工場パターン
関数の定義、VaRのObjectオブジェクト内の構成の関数宣言とオブジェクト名によってオブジェクトを与えるプロパティとメソッドを追加します。名=属性値を属性、そして最終的にオブジェクトを返します。
これは、入力パラメータ可能なホワイトボックスとして理解され、一連の戻りされる同じ属性名、メソッドオブジェクトが、オブジェクト間、互いに独立し、相関がありません
1つの 関数のCreateObject(名前、年齢、趣味){ 2 VAR OBJ = 新しいオブジェクト(); 3 obj.name = 名。 4 obj.age = 年齢; 5 obj.interest = 関数(){ 6 はconsole.log(+ '趣味である' 趣味)。 7 } 8 戻りOBJ。 9 } 10 VARの人物= CREATEOBJECT( 'qtfy'、24 '歌')。
プロトタイプモデル
関数は、関数のprototypeプロパティ機能により、ブランクに属性を追加するために、空(ヌルメソッド)を定義し、メソッド
オブジェクトを生成するために、varステートメントで関数のインスタンスを作成します。
1つの 関数のCreateObject(){} 2 createObject.prototype.name = 'qtfy' 。 3 = 24 createObject.prototype.age 。 4 createObject.prototype.hobby = 関数(){ 5 はconsole.log( 'Iが好き歌います' )。 6 } 7 VARの人物= 新規のCreateObject()。
さらに、空の関数の定義(空の方法)は、空の関数の属性名と値として、キーと値のペアの形式でオブジェクトを渡して、プロパティをプロトタイプするために使用することができます
このメソッドが呼び出されるJSONデータ(文字列限りかかわらず、キーの重引用符で囲む必要があります)
1つの 機能テスト(){} 2 test.prototype = { 3 '名称' 'qtfy' 、 4 '年齢': '24' 、 5 '趣味': '歌' 6 }
6.混合モード
コンストラクタ関数は、この関数を有する、請求現在のポイントを作成するために、渡されたパラメータの割り当ては、属性値
次いで、プロトタイプモデル関数に添加する方法
オブジェクトを作成する機能を構築するための最後のインスタンス
1つの 機能テスト(名前、年齢){ 2 本 .nameの= 名前。 3 この .age = 年齢; 4 } 5 test.prototype.hobby = 関数(){ 6 はconsole.log( '趣味が歌っています' ); 7 } 8 VARの人= 新しいテスト( 'qtfy'、24);
オブジェクトのトラバーサルとストレージ
オブジェクトトラバース1
k個の声明の中で、私のためにして、オブジェクトを横断します
各オブジェクトのiはメソッドの名前/属性名、前記kはオブジェクト名
利用可能なK [i]の各属性値/メソッドのアクセスコードを定義
2.オブジェクトがメモリに格納されています
メモリは、メモリスタック、ヒープ、コード・セグメントとデータ・セグメントに分割されています
ヒープメモリは、オブジェクトのアドレスでポイントされ、スタックメモリ内のオブジェクトの名前を保存します
オブジェクトのプロパティ(名前/値)とメソッド名、メソッド名が指しスニペットのヒープメモリに格納されています
オブジェクトコードセグメントである特定のコードの方法