Javascript 如何在ES6中通过`new function()`接口创建iterable`function*(){}`

Javascript 如何在ES6中通过`new function()`接口创建iterable`function*(){}`,javascript,iterator,Javascript,Iterator,标题本身就是,ES6中有一个新的iterable函数接口,问题很简单,如何通过新函数(…)接口创建一个支持yield的iterable函数 附言 我试过了 var f = function *() { yield 1; yield 2; yield 3; } 在Google Chrome控制台中,然后执行f.toString()操作,它给出了以下输出: function* () { yield 1; yield 2; yield 3; } 不知道如何处理它。。。当我尝

标题本身就是,ES6中有一个新的iterable函数接口,问题很简单,如何通过
新函数(…)
接口创建一个支持
yield
的iterable函数

附言

我试过了

var f = function *() {
  yield 1;
  yield 2;
  yield 3;
}
在Google Chrome控制台中,然后执行f.toString()操作,它给出了以下输出:

function* () {
  yield 1;
  yield 2;
  yield 3;
}
不知道如何处理它。。。当我尝试以下方法时:

var g = new Function(`
  yield 1;
  yield 2;
  yield 3;
`);
它产生错误:
Uncaught语法错误:意外数字


提前谢谢你

您可能会对以下内容感兴趣:

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中的一个示例:


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

你可能会对此感兴趣:

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中的一个示例:


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

你为什么要使用
new Function()
?我有一段动态代码是动态生成的,如果我能将它与新的ES6功能结合使用,那就太好了……我认为你必须将所有内容放在一行中。他使用勾号引号,允许你做完全相反的事情,将代码分成多行,而不是单引号或双引号:)你为什么要使用
new Function()
?我有一段动态代码是动态生成的,如果我能将其与新的ES6功能结合使用,那就太好了……我认为您必须将所有内容放在一行中。他使用勾号引号,允许您执行完全相反的操作,将代码分成多行,而不是单引号或双引号:)