素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

イテレータ

Object.prototype.__iterator__を拡張する場合、その中でfor in構文を使うと無限に再帰してしまうので、下のようにする。

Object.prototype.__iterator__ = function __iterator__(isKey) {
  delete Object.prototype.__iterator__;
  for (var k in this) if (this.hasOwnProperty(k)) {
    yield isKey ? k : this[k];
  }
  Object.prototype.__iterator__ = __iterator__;
};