User defined Iterables

As a generator function returns an iterator, you can conveniently define the [Symbol.iterator] method as a generator function instead.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

class AnimalsList {
   constructor (...args){
      this.index = -1;
      this.animals = args;
   }
   *[Symbol.iterator](){
      while (this.index<this.animals.length-1){
         this.index++;
         yield this.animals[this.index];
      }
   }}var myAnimals = new AnimalsList('Brownie','Greenie','Lucky','Spotty');for (let v of myAnimals) console.log(v);                                          // Brownie Greenie Lucky Spotty

</script></body><html>

At the time of writing, Array.prototype.values() is not supported by browsers. In the future, you may do the following instead:


RESETRUNFULL
<!DOCTYPE html><html><body><script>

class AnimalsList {
   constructor(...args) {
       this.animals = args;
   }
   *[Symbol.iterator]() { return this.animals.values(); }}

</script></body><html>