2015-04-20 13 views
6

Nie mogę utworzyć metody generatora jako literału obiektu.Czy istnieje sposób określenia metody generatora ES6 w literale obiektu w pliku node.js?

Oto mój kod źródłowy robocze:

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 
} 

Ale kiedy przenieść moją metodę generatora w obiekcie dosłowne:

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

mam SyntaxError: Unexpected token *

Jeśli dodać cytatów

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

uzyskać: SyntaxError: Unexpected strict mode reserved word

mam runnng nodejs v0.12.2 z --harmony opcji, ale bez względu na to, co robię, nie wydaje się uzyskać jego pracy.

Odpowiedz

7

* powinny być po hasła function jak to

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

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

Cytowanie Draft version of ECMA Script - 6's definition for Generator Expression,

funkcji * (FormalParameters [plon, GeneratorParameter]) {

GeneratorBody

}

Uwaga: Generator Expression jest inna funkcja generatora. Kiedy przypisujesz ją do zmiennej lub kojarzysz ją z kluczem w literale obiektu, tak naprawdę przypisujesz wyrażenie generatora. Normalna deklaracja generator będzie tak

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

Jak zrobić generator w klasie {} '' składni? W tej składni nie ma słowa kluczowego "function". – Finesse

8

@thefoureye już odpowiedział, jeśli używasz wyrażeń funkcyjnych następnie trzeba będzie umieścić * tokena zaraz po function tokena.

Można jednak użyć definicji metod w literałach obiektów. Tutaj, można by umieścić * przed nazwą metody generator Rzeczywiście, jednak jak w każdej definicji metody nie zawiera dwukropek i function kluczowe:

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

tutaj jak to zrobić w zwykłym definicji obiektu:

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

Oto jak to zrobić w definicji klasy ES6:

class MyClass { 
    * getRecords(data) {...} 
} 
var myobj = new MyClass(); 
Powiązane problemy