在Javascript中,給定一個生成器物件,我如何讓它輸出回傳該生成器物件的生成器函式的名稱?
換句話說:
function* thisIsMyName(i) {
yield i;
}
const gen = thisIsMyName(10);
console.log(gen.name); // How do I get this to output "thisIsMyName" using only the gen object?
呼叫gen.name不起作用,因為它不是
但是,您可以使用包裝函式解決此問題,這意味著該函式將回傳生成器和生成器函式:
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}
uj5u.com熱心網友回復:
從評論:
您需要創建一個中間工廠來傳遞對函式的參考以及回傳的生成器物件
不是很有用,但它可能是這樣的:
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://www.uj5u.com/ruanti/409197.html
標籤:
上一篇:如何合并2個物件陣列,僅保留新物件并獲取舊物件的屬性?
下一篇:無法讀取未定義的屬性(讀取地圖)
