.iterator
1.コンセプト:反復子は異なるデータ構造の様々な統合アクセス機構を提供するインターフェース機構です。
2.役割:
-
データ構造の多様性のために、統一された、簡単にアクセスインターフェイスを提供すること。
-
データ構造メンバは、特定の順序で配置することができます。
-
以下のための...循環の新しいトラバースコマンドをES6を作成し、Iteratorインターフェースは、主のために...消費の使用されています。
3.どのように動作します:
-
オブジェクトへのポインタを作成し、データ構造は、開始位置を指します。
-
初めての方法の次の呼び出し、自動データ構造の最初のメンバーへのポインタポイント
-
その後、次のメソッドを呼び出すために継続し、ポインタが最後のメンバーにポイントまで戻されました
-
次のメソッドを呼び出すたびに、値と行わ、{:現在のメンバーの値、行わ:ブール値}を含むオブジェクトを返します
-
値は、端を横切るデータの現在の構造に対応行うかどうかを示すブール値の現在のメンバーの値を表します。
-
イテレーションの値は、完全な値が返されると、未定義行われる偽であります
-
図4は、データイテレータ(トラバーサルのために利用可能な)ネイティブインターフェースを含みます
-
アレイ
-
引数
-
set容器
-
マップ・コンテナ
-
弦
-
......
1 LETのARR = [1,2,3 ]; 2 。3 用(I LETのARRの){ 4 にconsole.log(I); 5。 6。 } 7。 8。 LET OBJ = { 9。 名: 'OBJ1' 10 } 11 12は、 コンソール.logの(ARR); //配列は、反復子がインタフェース有する 13がある にconsole.log(ARR ...); //イテレータ3つのオペレータインタフェースをも用いる 14 にconsole.log(OBJ); 15 16 のために(I LETのOBJ){ 17 にconsole.log(I); //イテレータオブジェクトは、オブジェクトインタフェースし 18である 19。 }
アナログ実装インタフェースイテレータ
1 // アナログ実装イテレータインターフェイス 2 機能iteratorUtil(ターゲット){ 3 LETインデックス= 0 ; // ポインタの位置を示すために、実際に 4 リターン { //は、オブジェクトへのポインタを返す 5。 次に(){ // 次のオブジェクトのメソッドポインタ 6。 復帰をインデックス<target.length?{ 7。 値:ターゲット[インデックス++ ]、 8は DONE:falseに 9 }:{ 10 値:ターゲット[インデックス++ ]、 11。 DONE:trueに 12であります }。 13 } 14 } 15 } 16 17 // 生成一个迭代器对象 18 LETのARR = [ 1、2、3 ]。 図19は、 iteratorObj =せiteratorUtil(ARR)。 20 はconsole.log(iteratorObj.next()値。)。 21 はconsole.log(iteratorObj.next()値。)。 22 はconsole.log(iteratorObj.next()値。)。 23 はconsole.log(iteratorObj.next()値。)。
Objectオブジェクトのトラバーサルを実装6
1 ARRせ= [1,2,3,4 ]。 2 3 VAR OBJ = {名: '神戸'、年齢:40 }。 4 // はconsole.log(OBJ [Symbol.iterator])。//未定義 5 // はconsole.log(ARR [Symbol.iterator])。//関数 6 7 関数mockIterator(){ 8 9 = LET この; 10 11 LETインデックス= 0 。 12 LET長= 0 。 13 デバッガ 14 であれば(すなわちinstanceofのアレイ){ 15 の長さ=that.length; 16 リターン{ 17 次:関数(){ 18 リターン指数<長さ{値:その行っ[インデックス++]:偽 }:{値:その[インデックス++]、行わ:真} 19 } 20 } 21 } 他{ 22 長さ= .LENGTH Object.keys(その) 23の LETキー= Object.keys(その) 24 リターン{ 25 次:関数(){ 26 リターンインデックス<長さ{値:その[キー[インデックス++]、行わ:偽 }:{値:その[キー[インデックス++]、行わ:真} 27 } 28 } 29 } 30 31 } 32 33 34 35 配列。プロトタイプ[Symbol.iterator] = mockIterator。 36 のObject.prototype [Symbol.iterator] = mockIterator。 37 38 のために{(I ARRのせ) 39 にconsole.log(I)。 40 } 41 のために(私はOBJのせ){ 42 にconsole.log(I)。 43 }