이 기사에서는 JavaScript의 반복자에 대한 관련 지식을 제공하고 반복자가 무엇인지, 어떻게 사용자 정의하는지 살펴보겠습니다.
let arr = [1,2,3,4,5];for (let val of arr) { console.log(val);}
2. 맞춤 반복자
우선 두 가지 점을 충족해야 합니다.
Iterable 프로토콜
만족하는 방법 반복 가능한 프로토콜?
반복 가능한 객체가 되려면 객체가 @@iterator 메서드를 구현해야 합니다.
이는 객체(또는 프로토타입 체인의 객체)에 @@iterator 키가 있는 속성이 있어야 하며, 이는 Symbol.iterator 상수를 통해 액세스할 수 있음을 의미합니다.Iterator 프로토콜
즉, 반복 가능 항목을 충족하려면 프로토콜을 사용하려면 개체를 반복 가능한 개체로 만들기 위해 키 이름이Symbol.iterator
인 속성이 있어야 합니다.
Symbol.iterator
的属性,使其成为可迭代对象。
迭代器协议定义了产生一系列值(无论是有限个还是无限个)的标准方式。
当值为有限个时,所有的值都被迭代完毕后,则会返回一个默认返回值。
如何满足迭代器协议 ?
你的对象需要至少实现一个next()
方法,这个方法返回一个迭代器对象IteratorResult
。这个迭代器对象包含两个属性done
和·value
。
那么我们接下来开始自定义一个迭代器
由前文所讲,要想自定义迭代器,需要符合以下两个条件:
Symbol.iterator
属性next()
方法,这个 next()
方法返回一个包含value
和 done
반복자 프로토콜을 충족하는 방법은 무엇입니까?
객체는 반복자 객체 IteratorResult
를 반환하는 next()
메서드를 하나 이상 구현해야 합니다. 이 반복자 객체에는 done
및 value
라는 두 가지 속성이 포함되어 있습니다.
done:
반복자가 시퀀스에서 다음 값을 생성할 수 있으면 거짓입니다.
value 반복자가 반환한 값입니다. done이 true이면 Done을 생략할 수 있습니다
🎜🎜그럼 이터레이터 커스터마이징을 시작하겠습니다🎜🎜🎜위에서 언급했듯이 이터레이터를 커스터마이즈하려면 다음 두 가지 조건을 충족해야 합니다.🎜🎜🎜반복 가능한 객체가 되십시오. 즉,Symbol.iterator
속성이 있습니다🎜(즉, 반복 가능한 프로토콜: Symbol.iterator)🎜🎜반복자 객체는 next()
메서드를 반환합니다. 이 < code> next() 메서드는 value
및 done
속성을 포함하는 객체를 반환합니다 🎜(예: 반복자 프로토콜: return { next() { return { value, done } })🎜🎜let colors = { blue : "蓝色", green : "绿色", yellow : "黄色"}
colors[Symbol.iterator] = function() { let keys = Object.keys(colors); // 如果用 let keys = Reflect.ownKeys(colors),keys 就会包括一些不可枚举的属性 // 那么后面的 len 要减一,减去Symbol.iterator这个属性 // 根据实际情况选择使用 let len = keys.length; let index = 0; return { next : function() { if (index < len) { return { value : colors[keys[index++]], done : false } } return { done : true } } }}
for (let val of colors) { console.log(val);}
위 내용은 10분 안에 JavaScript 반복자가 무엇인지 이해하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!