ソース コードの観点から見た JS 組み込み反復可能オブジェクトの実装原則の解釈
JavaScript では、多くの組み込みオブジェクトが反復可能です。つまり、次のことが可能です。ループ構造を使用して要素を反復処理します。たとえば、配列、文字列、マップはすべて反復可能なオブジェクトです。この記事では、JavaScript の組み込み反復可能オブジェクトの実装原則をソース コードの観点から説明し、具体的なコード例を示します。
JavaScript の組み込み反復可能オブジェクトの実装原理には、主に反復子と反復可能プロトコルという 2 つの側面が関係します。
反復子がどのように実装されるかを確認するために配列を例に挙げてみましょう:
const arr = [1, 2, 3]; const iterator = arr[Symbol.iterator](); console.log(iterator.next()); // {value: 1, done: false} console.log(iterator.next()); // {value: 2, done: false} console.log(iterator.next()); // {value: 3, done: false} console.log(iterator.next()); // {value: undefined, done: true}
上の例では、配列の Symbol.iterator メソッドを呼び出して取得します。オブジェクト: イテレータ オブジェクト。次に、 next() メソッドを継続的に呼び出すことで、配列内の要素を反復処理できます。走査は、done 属性が true になると終了します。
以下はカスタム反復可能オブジェクトの例です:
const myIterableObject = { [Symbol.iterator]() { let count = 1; return { next() { if (count <= 3) { return { value: count++, done: false }; } else { return { value: undefined, done: true }; } } }; } }; for (const item of myIterableObject) { console.log(item); } // 输出:1, 2, 3
上の例では、myIterableObject オブジェクトは Symbol.iterator メソッドを実装し、反復子オブジェクトを返します。 next() メソッドはイテレータ オブジェクトに実装されており、各呼び出しは現在の値とトラバーサル ステータスを返します。 for...of ループを通じて myIterableObject オブジェクトを走査すると、対応する反復子オブジェクトが走査のために自動的に呼び出されます。
実際、反復子および反復可能プロトコルは JavaScript の設計パターンであり、多くのシナリオで広く使用されています。たとえば、ジェネレーターもイテレーターと反復可能なプロトコルの実装に基づいています。
要約すると、JavaScript の組み込み反復可能オブジェクトの実装原則は、反復子と反復可能プロトコルを通じて実装されます。 iterator オブジェクトは、反復可能オブジェクト内の要素を走査するための next() メソッドを提供します。また、反復可能プロトコルでは、反復可能オブジェクトが Symbol.iterator メソッドを持ち、反復子オブジェクトを返す必要があると規定しています。イテレーターと反復可能プロトコルを柔軟に使用することで、反復可能オブジェクトをカスタマイズし、より多くの反復機能を実現できます。
この記事が、JavaScript の組み込み反復可能オブジェクトの実装原理をより深く理解するのに役立つことを願っています。
以上がソースコードの観点から見た、JS の組み込み反復可能オブジェクトの実装原則の解釈の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。