`this`和`new` with generator

时间:2014-03-20 17:32:29

标签: javascript generator

这个定义得很好吗?即我有一个生成器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既是迭代器又是新对象。新对象立即返回,但尚未填充。

所有这些都是预期的和明确定义的行为吗?

使用生成器作为构造函数(例如在异步代码中)是否有意义?

0 个答案:

没有答案