JavaScriptのyieldを使ってイテレータを作りたいのだが

JavaScript1.7の yield 文を使ってイテレータを作りたいのだが、ジェネレータの中からは this が参照できないみたいで悩む。理由はなんとなくわかるけど、結局、解決策はわからず。


Array.prototype.iterator = (function() {
for (i = 0; i < this.length; i++) // ←ここで this.length が 0 になる(TT
yield this[i];
yield false;
})();

var r = ["a", "b", "c", "d"];

while (s = r.iterator.next()) {
alert(s);
}

どうしたものやら。