有没有一种方法来指定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,GeneratorParameter] ){
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();