有没有办法在node.js中的对象文字中指定ES6生成器方法?

sen*_*sor 7 javascript iterator node.js ecmascript-6

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

这是我的工作源代码:

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
}
Run Code Online (Sandbox Code Playgroud)

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

var myobj = {
    *getRecords: function (data) {...}
}
Run Code Online (Sandbox Code Playgroud)

我明白了 SyntaxError: Unexpected token *

如果我添加引号

var myobj = {
    '*getRecords': function (data) {...}
}
Run Code Online (Sandbox Code Playgroud)

我明白了: SyntaxError: Unexpected strict mode reserved word

我用--harmony选项运行nodejs v0.12.2 ,但不管我做什么,我似乎无法让它工作.

Ber*_*rgi 9

@thefoureye已经回答了,如果你正在使用函数表达式,那么你必须在*令牌之后放置function令牌.

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

var myobj = {
    *getRecords(data) {
        …
    }
};
Run Code Online (Sandbox Code Playgroud)


the*_*eye 8

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

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

for (var record of myobj['getRecords']()) {}
Run Code Online (Sandbox Code Playgroud)

引用ECMA脚本草案版本--6对Generator Expression的定义,

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

GeneratorBody

}

注意: Generator Expression与Generator Function不同.将其分配给变量或将其与Object literal中的键关联时,实际上是在分配Generator表达式.正常的生成器声明将是这样的

function * GeneratorFunctionName(...) {
}
Run Code Online (Sandbox Code Playgroud)


Fin*_*sse 6

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

var myobj = {
    getRecords: function* (data) {...}
}
Run Code Online (Sandbox Code Playgroud)

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

class MyClass {
    * getRecords(data) {...}
}
var myobj = new MyClass();
Run Code Online (Sandbox Code Playgroud)