1. ホーム
  2. javascript

ES6クラスからイテレータを作成する方法

2023-11-26 23:43:14

質問

JS1.7と同じ方法でES6クラスからイテレータを作るにはどうしたらよいでしょうか? SomeClass.prototype.__iterator__ = function() {...} の構文と同じように、ES6クラスからイテレータを作るにはどうしたらよいでしょうか?

[EDIT 16:00]です。

以下のように動作します。

class SomeClass {
    constructor() {
    }

    *[Symbol.iterator]() {
        yield '1';
        yield '2';
    }

    //*generator() {
    //}

}

an_instance = new SomeClass();
for (let v of an_instance) {
    console.log(v);
}

WebStormのフラグ *[Symbol.iterator]() にはアスタリスクの直後に 'function name expected' という警告が出ますが、それ以外は Traceur で問題なくコンパイル・実行できます。 (注意:WebStorm は *generator() .)

どのように解決するのですか?

適切なイテレータメソッドを定義する。例えば

class C {
  constructor() { this.a = [] }
  add(x) { this.a.push(x) }
  [Symbol.iterator]() { return this.a.values() }
}

編集:サンプル使用。

let c = new C
c.add(1); c.add(2)
for (let i of c) console.log(i)