这个定义得很好吗?即我有一个生成器function* gen()
,我正在做new gen()
。我是否将迭代器或新对象或两者合并在一起?在函数内部,this
像往常一样指向新对象吗?
我试过了:
function* gen() {
this.f = "hey";
yield this;
return 42;
}
var x = new gen();
console.log("x:", x, x.toString());
var n1 = x.next();
console.log("1:", n1);
var n2 = x.next();
console.log("2:", n2);
console.log("x:", x, x.toString());
console.log("eq:", n1.value === x);
输出是:
x: {} [object Generator]
1: { value: { f: 'hey' }, done: false }
2: { value: 42, done: true }
x: { f: 'hey' } [object Generator]
eq: true
显然,x
既是迭代器又是新对象。新对象立即返回,但尚未填充。
所有这些都是预期的和明确定义的行为吗?
使用生成器作为构造函数(例如在异步代码中)是否有意义?