2016-08-13 2 views
0

Вот мой пример, который работает на jsfiddle:Ожидаемый идентификатор, строка или число с * [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) 
 
}

Но когда я переписать его в Visual Studio:

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

    } 
} 

Я получаю сообщение об ошибке:

Expected identifier, string or number

1

Итак, мой вопрос: как это исправить?

ответ

1

Вы не можете определить генератор, используя синтаксис class. Это прямой перевод вашего кода в ES6, который фактически функционирует.

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) 
 
}

Но это не совсем, как вы должны делать вещи. Symbol.iterator нужно только разрешить итерацию значение,Array.prototype.values обеспечит только что вам нужно

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

'Неперехваченные TypeError: this.animals.values ​​не function' –

Смежные вопросы