2016-08-13 7 views
0

Hier ist meine Demo, die auf jsfiddle funktioniert:Erwartete Bezeichner, Zeichenfolge oder Zahl mit * [Symbol.iterator]

class Animal { 
 
    constructor(...names) { 
 
     this.animals = names 
 
    } 
 
    *[Symbol.iterator]() { 
 
     for (let animal of this.animals) { 
 
      yield animal 
 
     } 
 
    } 
 
} 
 
var animals = new Animal('cat', 'dog', 'tiger'); 
 
for (let animal of animals) { 
 
    console.log(animal) 
 
}

Aber wenn ich es in Visual Studio neu schreiben:

class Animal { 
    *[Symbol.iterator]() { 

    } 
} 

ich bekomme diese Fehlermeldung:

Expected identifier, string or number

1

Also, meine Frage: wie man es beheben?

Antwort

1

Sie können einen Generator nicht mit der Syntax class definieren. Dies ist eine direkte Übersetzung Ihres Codes in ES6, die tatsächlich funktioniert.

class Animal { 
 
    constructor(...names) { 
 
    this.animals = names 
 
    } 
 
} 
 

 
// you could define the generator on the prototype here ... 
 
// but make sure you read the second half of this answer 
 
Animal.prototype[Symbol.iterator] = function*() { 
 
    for (let animal of this.animals) { 
 
    yield animal 
 
    } 
 
} 
 

 
var animals = new Animal('cat', 'dog', 'tiger'); 
 
for (let animal of animals) { 
 
    console.log(animal) 
 
}

Aber das ist wirklich nicht, wie man Dinge tun, sind angeblich zu. Die Symbol.iterator braucht lediglich ein iterable Wert lösenArray.prototype.values genau das Richtige bieten werden Sie

class Animal { 
 
    constructor(...names) { 
 
    this.animals = names 
 
    } 
 
    [Symbol.iterator]() { 
 
    return this.animals.values() 
 
    } 
 
} 
 

 
var animals = new Animal('cat', 'dog', 'tiger'); 
 
for (let animal of animals) { 
 
    console.log(animal) 
 
}

+0

'Uncaught Typeerror brauchen: this.animals.values ​​ist kein function' –

Verwandte Themen