发布于 2022-01-12 12:45:49
恐怕您不能这样访问它,因为生成此生成器的函数的引用存储在由符号定义的属性中。符号是唯一的,不能重新创建(但是一直都是坚果,请参见Symbol.for)。这意味着,如果没有对符号的引用,就无法获得它的值。
Object.getOwnPropertySymbols()不返回本机的。
但是,在检查实例时,可以在控制台中看到符号道具:

但是,您可以使用包装器函数来解决这个问题,这意味着一个函数将同时返回生成器和生成器函数:
function thisIsMyName(value){
const generatorFunction = function* thisIsMyName(i) {
yield i;
}
return {
generator : generatorFunction(value),
generatorFunction: generatorFunction
}
}
const gen = thisIsMyName(10);
console.log(gen.generatorFunction.name) // prints thisIsMyName
console.log(gen.generator.next()) // prints {value: 10, done: false}发布于 2022-01-12 12:45:41
从评论中:
您需要创建一个传递函数引用的中间工厂以及返回的生成器对象。
不太有用,但可能是这样的:
const someGenerator = {
*thisIsMyName(i = 1, limit = 10) {
while (i < limit) {
yield i++;
}
},
get name() {return this.thisIsMyName.name},
};
const myGen = { name: someGenerator.name, i: someGenerator.thisIsMyName(15, 20)};
console.log(myGen.i.next().value, myGen.name);
或者..。
function createGenerator(name, min = 1, max = 10) {
function* xGen() {
while (min < max) {
yield min++;
}
};
return {gen: xGen(), name,};
};
const myGen = createGenerator(`myName`, 15, 20);
const values = [];
let nxt = {};
while (!nxt.done) {
nxt = myGen.gen.next();
!nxt.done && values.push(nxt.value);
}
console.log(values.join(`, `), `\nmyGen.name = '${myGen.name}'`);
https://stackoverflow.com/questions/70681340
复制相似问题