Je n’arrive pas à créer une méthode générasortingce en tant que littéral d’object.
Voici mon code source de travail:
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 }
Mais quand je déplace ma méthode de générateur dans le littéral d’object:
var myobj = { *getRecords: function (data) {...} }
SyntaxError: Unexpected token *
Si j’ajoute des citations
var myobj = { '*getRecords': function (data) {...} }
Je reçois: SyntaxError: Unexpected ssortingct mode reserved word
Je lance nodejs v0.12.2 avec l’option --harmony
, mais quoi que je fasse, je n’arrive pas à le faire fonctionner.
Le *
devrait être après le mot clé function
, comme ceci
var myobj = { getRecords: function* (data) {} } for (var record of myobj['getRecords']()) {}
Citant le brouillon de la définition de ECMA Script – 6 pour Generator Expression ,
function * (FormalParameters [Rendement, GeneratorParameter] ) {
GeneratorBody
}
Remarque: L’ expression du générateur est différente de la fonction du générateur. Lorsque vous l’assignez à une variable ou l’associez à une clé dans le littéral Object, vous affectez en réalité une expression de générateur. La déclaration normale du générateur sera comme ceci
function * GeneratorFunctionName(...) { }
@Thefoureye a déjà répondu, si vous utilisez des expressions de fonction, vous devrez alors placer le jeton *
juste après le jeton de function
.
Cependant, vous pouvez également utiliser des définitions de méthodes dans les littéraux d’object. Ici, vous placeriez bien le *
avant le nom de la méthode du générateur, mais comme pour toute définition de méthode, il ne contient ni le signe deux-points ni le mot-clé function
:
var myobj = { *getRecords(data) { … } };
Voici comment le faire en définition d’object simple:
var myobj = { getRecords: function* (data) {...} }
Voici comment faire dans la définition de classe ES6:
class MyClass { * getRecords(data) {...} } var myobj = new MyClass();