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