Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Iterator() コンストラクターは、イテレーターを作成する他のクラスのスーパークラスとして意図通りに使用されることを目的としています。これ自体で構築された場合、エラーが発生します。
メモ: Iterator() は new でしか作成できません。 new を使用せずに名付けると TypeError が発生します。さらに、 Iterator() は実際にはそれ自体で作成することはできません。通常は、サブクラスのコンストラクター内で super() を呼び出すことで暗黙的に作成されます。
なし。
新しい Iterator オブジェクトです。
new.target が Iterator 関数事態に呼び出された場合、つまり、 Iterator コンストラクターそれ自身が構築された場合。
Iterator は抽象クラスを表します。抽象クラスとは、サブクラスに対して指定された共通のユーティリティを提供するクラスですが、それ自体がインスタンス化されることを意図していません。これは、他にもイテレータークラスのスーパークラスであり、特定の反復処理アルゴリズムを実装するサブクラスを作成するために使用されます。つまり、 Iterator のすべてのサブクラスは、イテレータープロトコルで要求されるように、 next() メソッドを実装する必要があります。 Iterator は実際には next() メソッドを提供していないため、 Iterator を直接構築することは意味がありません。
また、 Iterator.from() を使用して、既存の反復可能オブジェクトまたはイテレーターオブジェクトから Iterator のインスタンスを作成することもできます。
次の例では、反復処理が可能なカスタムデータ構造である Range を定義しています。オブジェクトを反復処理可能にするには、ジェネレーター関数という形で [Symbol.iterator]() メソッドを提供します。
これはうまく動作しますが、組み込みのイテレーターの作業方法ほど優れてはいません。 2 つの問題があります。
Iterator をサブクラス化することで、組み込みのイテレーター(例えば、マップのイテレーター)の実装を模倣することができます。これにより、 [Symbol.toStringTag] などの追加のプロパティを定義することができ、返値のイテレーターにおいてイテレーターのヘルパーメソッドを利用できるようになります。
サブクラス化パターンは、多数の独自のイテレーターを作成したい場合に便利です。 Iterator を継承していない反復可能オブジェクトやイテレーターオブジェクトがあり、そのオブジェクトにイテレーターのヘルパーメソッドを呼び出したいだけの場合、 Iterator.from() を使用して、一時的に Iterator インスタンスを作成することができます。
| ECMAScript® 2027 Language Specification # sec-iterator-constructor |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2026年2月13日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.