有没有办法在node.js中的对象字面量中指定ES6生成器方法?
Is there a way to specify ES6 generator method in object literal in node.js?
我似乎无法将生成器方法创建为对象文字。
这是我的工作源代码:
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
选项运行 nodejs v0.12.2,但无论我做什么,我似乎都无法正常工作。
*
应该在function
关键字之后,像这样
var myobj = {
getRecords: function* (data) {}
}
for (var record of myobj['getRecords']()) {}
引用 Draft version of ECMA Script - 6's definition for Generator Expression,
function * ( FormalParameters[Yield,GeneratorParameter] ) {
GeneratorBody
}
注意:生成器表达式不同于生成器函数。当您将其分配给变量或将其与对象文字中的键相关联时,您实际上是在分配生成器表达式。正常的生成器声明会像这样
function * GeneratorFunctionName(...) {
}
@thefoureye 已经回答了,如果您使用的是函数表达式,那么您必须将 *
标记紧跟在 function
标记之后。
但是,您也可以在对象文字中使用方法定义。在这里,您确实将 *
放在生成器方法名称之前,但是与每个方法定义一样,它不包含冒号和 function
关键字:
var myobj = {
*getRecords(data) {
…
}
};
这里是如何在普通对象定义中做到这一点:
var myobj = {
getRecords: function* (data) {...}
}
这里是如何在 ES6 中做到这一点 class 定义:
class MyClass {
* getRecords(data) {...}
}
var myobj = new MyClass();
我似乎无法将生成器方法创建为对象文字。
这是我的工作源代码:
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
选项运行 nodejs v0.12.2,但无论我做什么,我似乎都无法正常工作。
*
应该在function
关键字之后,像这样
var myobj = {
getRecords: function* (data) {}
}
for (var record of myobj['getRecords']()) {}
引用 Draft version of ECMA Script - 6's definition for Generator Expression,
function * ( FormalParameters[Yield,GeneratorParameter] ) {
GeneratorBody
}
注意:生成器表达式不同于生成器函数。当您将其分配给变量或将其与对象文字中的键相关联时,您实际上是在分配生成器表达式。正常的生成器声明会像这样
function * GeneratorFunctionName(...) {
}
@thefoureye 已经回答了,如果您使用的是函数表达式,那么您必须将 *
标记紧跟在 function
标记之后。
但是,您也可以在对象文字中使用方法定义。在这里,您确实将 *
放在生成器方法名称之前,但是与每个方法定义一样,它不包含冒号和 function
关键字:
var myobj = {
*getRecords(data) {
…
}
};
这里是如何在普通对象定义中做到这一点:
var myobj = {
getRecords: function* (data) {...}
}
这里是如何在 ES6 中做到这一点 class 定义:
class MyClass {
* getRecords(data) {...}
}
var myobj = new MyClass();