如何通过ES6中的`new Function()`接口创建可迭代的`function *(){}`

时间:2016-05-30 10:04:24

标签: javascript iterator

标题代表自己,ES6中有一个新的可迭代函数接口,问题很简单,如何通过yield接口创建一个支持new Function(...)的可迭代函数,< / p>

P.S。

我已经尝试过了

var f = function *() {
  yield 1;
  yield 2;
  yield 3;
}

在谷歌Chrome控制台中,然后执行f.toString(),它提供了以下输出:

function* () {
  yield 1;
  yield 2;
  yield 3;
}

不确定如何处理它...当我尝试以下内容时:

var g = new Function(`
  yield 1;
  yield 2;
  yield 3;
`);

产生错误:Uncaught SyntaxError: Unexpected number

提前谢谢!

1 个答案:

答案 0 :(得分:4)

您可能希望对此感兴趣:

var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
var g = new GeneratorFunction("a", "yield a * 2");
var iterator = g(10);
console.log(iterator.next().value); // 20

这是来自MDN的示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction

它基本上是你想要的,看起来你只是看着错误的构造函数。