前言:
// 迭代协议可以定制对象的迭代行为-分为两个协议:可迭代协议、迭代器协议// 可迭代协议:增加方法[Symbol,=.iterator](){}(属性名表达式)返回符合协议器的对象// 迭代器协议:有next方法的对象,next方法返回:// 已结束:{done:true}// 继续迭代:{done:false,value:'x'}// 可以使用Generator或自己实现对象,next
Generator法:
<script>const obj = {// Symbol.iterator 内置常量//[属性名表达式](){}[Symbol.iterator](){// 手写const arr = [1,2,3,4,5]let index = 0return {next(){if(index < arr.length){// 可以继续迭代return {done:false,value:arr[index++]}}else{return {// 已结束done:true}}}}}}for(const iterator of obj){console.log('iterator',iterator)}</script>
手写使用next和对象:
<script>const obj = {// Symbol.iterator 内置常量//[属性名表达式](){}[Symbol.iterator](){// 使用Generatorfunction* gen(){yield 1yield 2yield 3yield 4yield 5}return gen()}}for(const iterator of obj){console.log('iterator',iterator)}</script>