Iterator遍历器的底层原理
遍历器Iterator的遍历过程
1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器本质上,就是一个指针对象。 2)第一次调用对象的next方法,可以将指针指向数据结构的第一位成员。 3)第二次调用对象的next方法,指针就指向数据结构的第二位成员。 4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。
以数组arr为例
<script>
let arr = [11, 22, 33];
function myIterator(array){
let index = 0;
return {
next: function () {
if(array.length>index){
return {value:array[index++],done:false};
}else{
return {value:undefined,done:true};
}
}
}
};
let aa = myIterator(arr);
console.log(aa.next());
console.log(aa.next());
console.log(aa.next());
console.log(aa.next());
console.log(aa.next());
</script>
"for…of"是遍历器iterator的语法糖,所谓语法糖,简而言之就是一种接口,可以实现代码从面向过程到面向对象的转变。给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。
写一个接口,用iterator来遍历对象。
<script>
let obj = {name:'Lee',age:18,school:'北京大学'};
obj[symbol.iterator] = function(){
let index = 0;
let keys = Object.keys(this);
return {
next:()=>{
if(keys.length > index){
return{value : this[keys[index++]],down : false};
}else{
return{value : undefined,down : true};
}
}
}
};
let objInter = obj[symbol.intertor]();
console.log(objInter.next());
console.log(objInter.next());
console.log(objInter.next());
console.log(objInter.next());
</script>
(暂更新于2021.07.22 22:58 后续更新…)
|