2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSのジェネレーター関数の書き方まとめ

Last updated at Posted at 2018-02-04

JSでgeneratorを書くとき、メソッドの記法によって*をどこに書くかわからなくなることがあったのでまとめた。

generatorについて
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators

ジェネレーター関数は、イテレーターのファクトリーとして働く、特別な種類の関数です。この関数を実行すると、新しいジェネレーターを返します。function* 構文を使用している場合に、関数はジェネレーター関数となります。

通常の関数式

let g = function* () {};

これは最も一般的でよく見る形で、functionの後に*をつけるだけなので迷うこともない。

オブジェクト内の関数

let obj = {
   *g() {}
};
obj.g()

オブジェクト内に関数g()があった場合のジェネレーター関数の書き方。
関数名の前に*をつける。
呼び出しはobj.g()

文字列による関数オブジェクト

const generatorName = 'g';
let obj = {
   *[generatorName]() {}
};
obj.g()

オブジェクト初期化子による関数。generatorName という関数名を文字列として指定した時。
その場合も関数名の前だが[]内にある変数が関数名として評価されるので[]外に*をつける。
呼び出しはobj.g()

・クラス内の文字列による関数オブジェクト

const generatorName = 'g';
class Hoge {
   *[generatorName]() {}
}
new Hoge().g();

クラス内に書く場合でも同様に*[generatorName]となる。

Arrow Functionによる関数オブジェクト

できない。

まとめ

どっかに*をつければいい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?