【问题标题】:Is there a way to specify ES6 generator method in object literal in node.js?有没有办法在 node.js 的对象文字中指定 ES6 生成器方法?
【发布时间】:2015-06-27 07:53:16
【问题描述】:

我似乎无法将生成器方法创建为对象字面量。

这是我的工作源代码:

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,但无论我做什么,我似乎都无法让它工作。

【问题讨论】:

    标签: javascript node.js iterator ecmascript-6


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      @thefoureye 已经回答了,如果您使用函数表达式,那么您必须将 * 标记放在 function 标记之后。

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

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

      【讨论】:

        【解决方案3】:

        * 应该在 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]) {

        生成器主体

        }

        注意:生成器表达式不同于生成器函数。当您将其分配给变量或将其关联到 Object 文字中的键时,您实际上是在分配生成器表达式。正常的生成器声明会是这样的

        function * GeneratorFunctionName(...) {
        }
        

        【讨论】:

        • 如何在class {}语法中生成生成器?该语法中没有 function 关键字。
        猜你喜欢
        • 2018-10-27
        • 2017-02-12
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 2022-06-25
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多