2015-04-20 94 views
6

我似乎无法创建一个生成器方法作为对象字面量。有没有一种方法可以在node.js中的对象字面值中指定ES6生成器方法?

这是我工作的源代码:

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

我runnng的NodeJS v0.12.2与--harmony选项,但无论我做什么,我似乎无法得到它的工作。

回答

7

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

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

for (var record of myobj['getRecords']()) {} 

引述Draft version of ECMA Script - 6's definition for Generator Expression

功能*(FormalParameters [产率,GeneratorParameter]){

Generator Body

}

注:发生器表达是从发生器功能不同。当你将它分配给一个变量或将它关联到对象字面值中的一个键时,你实际上是在分配一个生成器表达式。正常的发电机声明会是这样

function * GeneratorFunctionName(...) { 
} 
+0

如何使发电机在'类{}'的语法?该语法中没有'function'关键字。 – Finesse

8

一个@thefoureye已经回答了,如果您使用的函数表达式,那么你将必须把function令牌后*令牌权利。

但是,您也可以在对象文字中使用方法定义。在这里,你会放置*确实产生方法的名称之前,但与每一个方法定义,它不包含冒号和function关键字:

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

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

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

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

class MyClass { 
    * getRecords(data) {...} 
} 
var myobj = new MyClass(); 
相关问题