◆ * つけて作った関数(ジェネレータ)に .bind メソッドを使う
◆ .next 単位で this を変えることはできない

var obj = {
*gen(arr){
const subgen = function*(entry){
const k = entry[0]
let n = entry[1]
while(n--)
yield {k, t:this.getTime()}
}
for(const a of arr.entries())
yield* subgen.bind(this)(a)
},
   getTime(){ return new Date().toLocaleString() }
}
for(const val of obj.gen([1,2,0,2])) console.log(val)
Object {k: 0, t: "2016/5/17 22:30:34"}
Object {k: 1, t: "2016/5/17 22:30:35"}
Object {k: 1, t: "2016/5/17 22:30:35"}
Object {k: 3, t: "2016/5/17 22:30:35"}
Object {k: 3, t: "2016/5/17 22:30:35"}


function* gen(){console.log(this.test)}
console.log(gen().next())
console.log(gen.bind({test:1})().next())
undefined
1

上のほうはちょっと複雑なことになりましたが 結局は下側です
ジェネレータ自体を bind します

gen().bind({})() や gen().next.bind()() ではないので注意です

私は最初 .next 単位で bind するのかとするのかと .next.bind なんて書きましたし 次は イテレータに対してかなと gen().bind とかやりました
最後に gen 自体が GeneratorFunction という Function っぽいもののインスタンスなのだからこれに bind メソッドあるのじゃない?とやってみるとうまくいきました

bind はジェネレータからイテレータ生成時にするので途中で変えることはできないです
普通は関数の途中で this がかわらないですし 自然な動きですね


ところで上側の例はなんであるの?というところですが 単純にこんな感じで ひとつのオブジェクト内で 関数や ジェネレータから ジェネレータを実行したときに this を引き継ぐために bind したいというのがよくある例かなーということで作ってみたものです