イテレータ
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__; };