바꿀 수 있는 대상을 만들고 for...of、for...in으로 이동

4284 단어 JavaScriptIterator
JavaScript에 확장 가능한 프로토콜이 있음
반복 처리 프로토콜 | MDN

JavaScript의 패러디 가능한 대상을 만들어 봤습니다.

  • 키(Symbol.iterator)에 넥스트 함수를 가진 대상을 등록합니다.
  • 시종 참조objthat = this.
  • next 함수를 실행할 때마다 원소를 하나하나 전진시킨다.
  • 중도 요소의 경우 되돌아온다{ value: val, done: false }.
  • 마지막 요소가 오면 되돌아온다{ done: true}.
  • 당신의 지적을 기대합니다.
    
    var iterator = function () {
      var current = 0
      var keys = Object.keys(this)
      var that = this // objectに登録するとthat
      var iterator = {
        next() {
          if (current < keys.length) {
            var result = { value: that[keys[current]], done: false }
            current++;
            return result
          } else {
            return { done: true }
          }
        }
      }
      return iterator
    }
    
    var obj = { a: 1, b: 2 }
    obj[Symbol.iterator] = iterator;//iterableにする
    
    for (let val of obj) {
      console.log(val)// 1, 2
    }
    
    for (let key in obj) {
      console.log(key)// a, b
    }
    
    

    좋은 웹페이지 즐겨찾기