12.1 이터레이션 프로토콜

  • 모든 객체를 이터러블(iterable) 객체로 바꿀 수 있음

1) 이터레이터를 가져와서 이터레이터 프로토콜을 구현하는 방법

  class Log {
    constructor(){
      this.messages = [];
    }

    add(message){
      this.messages.push({ message, timestamp: Date.now() });
    }

    [Symbol.iterator](){
      return this.messages.values();
    }
  }

  const log = new Log();
  log.add("first day at see");
  log.add("spotted whale");
  log.add("spotted another vessel");

  for (let entry of log) {
    console.log(`${entry.message} @ ${entry.timestamp}`);
  }

결과

first day at see @ 1535419744779
spotted whale @ 1535419744779
spotted another vessel @ 1535419744779

2) 이터이터를 직접 만드는 방법

  class Log {
    constructor(){
      this.messages = [];
    }

    add(message){
      this.messages.push({ message, timestamp: Date.now() });
    }

    [Symbol.iterator](){
      let i = 0;
      const messages = this.messages;
      return {
        next() {
          if (i >= messages.length)
            return { value: undefined, done: true };
          return { value: messages[i++], done: false };
        }
      }
    }
  }

Last updated