Javascript生成器:如何获取一个对象作为参数来生成另一个对象?

Javascript生成器:如何获取一个对象作为参数来生成另一个对象?,javascript,generator,es6-generator,Javascript,Generator,Es6 Generator,我试图获取一个“模板”对象作为生成器的输入,以便获取其他对象。我将能够在每一代人之前更改模板 它几乎像预期的那样工作,但我有以下问题。我只是在此列出了一个简化的问题示例: function* generator () { while(true) { let obj = yield yield { name: obj.name } } } let gen = generator() let obj = {

我试图获取一个“模板”对象作为生成器的输入,以便获取其他对象。我将能够在每一代人之前更改模板

它几乎像预期的那样工作,但我有以下问题。我只是在此列出了一个简化的问题示例:

function* generator () {
    while(true) {
        let obj = yield
        yield {
            name: obj.name
        }
    }
}
let gen = generator()

let obj = {
    name: 'name'
}
gen.next(obj)

obj.name = 'test'
for(let i=3; i--; ) {
    let item = gen.next(obj).value
    console.log(JSON.stringify(item))
}
我期望得到的结果是:

{name: test}
{name: test}
{name: test}
然而,我得到:

{name: test}
undefined
{name: test}

因为你两次
屈服
,一次什么也不屈服。产量只有一次:

 let obj = {};
 while(true) {
    obj = yield { name: obj.name };
 }

因为你两次
屈服
,一次什么也不屈服。产量只有一次:

 let obj = {};
 while(true) {
    obj = yield { name: obj.name };
 }

若要对此答案进行一点扩展,@JoãoOtero,您在循环之前预生成了一个值,该值隐藏了第一个未定义的结果。若要对此答案进行一点扩展,@JoãoOtero,您在循环之前预生成了一个值,该值隐藏了第一个未定义的结果