2015-04-20 90 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(); 
相關問題