有没有一种方法来指定node.js中的对象字面量的ES6生成器方法?

我似乎无法创build一个生成器方法作为对象文字。

这是我的工作源代码:

function *getRecords (data) { for (var i = 0; i < data.length; i++) { yield data[i]; } } var records = getRecords(data); for (var record of records) { // process my record } 

但是当我在对象字面量中移动我的生成器方法时:

 var myobj = { *getRecords: function (data) {...} } 

我得到SyntaxError: Unexpected token *

如果我添加引号

 var myobj = { '*getRecords': function (data) {...} } 

我得到: SyntaxError: Unexpected strict mode reserved word

我使用–harmony选项runnng nodejs v0.12.2,但不pipe我做什么,我似乎无法得到它的工作。

*应该在function关键字之后,像这样

 var myobj = { getRecords: function* (data) {} } for (var record of myobj['getRecords']()) {} 

引用ECMA脚本的草稿版本 – 6的发生器expression式的定义 ,

函数*(FormalParameters [Yield,Gen​​eratorParameter] ){

GeneratorBody

}

注意:生成器expression式与生成器函数不同。 当你把它分配给一个variables或者把它关联到对象文本中的一个键时,你实际上是在分配一个生成器expression式。 正常的发电机声明将是这样的

 function * GeneratorFunctionName(...) { } 

@thefoureye已经回答了,如果你正在使用函数expression式,那么你将不得不将*标记放在function标记的后面。

但是,您也可以在对象文字中使用方法定义。 在这里,你应该把*放在生成器方法的名字的前面,但是和每个方法定义一样,它不包含冒号和function关键字:

 var myobj = { *getRecords(data) { … } }; 

这里如何在普通的对象定义中做到这一点:

 var myobj = { getRecords: function* (data) {...} } 

这里如何在ES6类定义中做到这一点:

 class MyClass { * getRecords(data) {...} } var myobj = new MyClass();