笔者说:戏台上的老将军又来立flag啦,以后每天看小红书最少一小时!
JavaScript高级程序设计(红色盛典) 读记 第七章
首先呐,我们要带着目的读:
我们的目的:学习ES6新增的两个高级特性:迭代器和生成器
第一节:迭代
什么是迭代呐?
for循环(计数循环)就是一种最简单的迭代
for(let i;i<=10;++i){
}
扩展:for-of循环
let arr = ['foo','bar','baz'];
for(let el of arr) {
console.log(el);
}
//foo
//bar
//baz
第二节:迭代器
下面这个例子比较了一个显式迭代器的实现和一个原生迭代器的实现:
class Foo{
[Symbol.iterator] {
return{
next() {
return {
done:false,value:'foo'};
}
}
}
}
let f = new Foo();
//打印出实现了迭代器接口的对象
console.log(f[Symbol.iterator]()); //{next : f() {}}
-------------------------------------------------------------------------------
//Array类型实现了可迭代接口(Iterable)
//调用Array类型的默认迭代工厂函数
//会创建一个ArrayIterator的实例
let a = new Array();
//打印出ArrayIterator的实例
console.log(a[Symbol.iterator]()); //Array Iterator{}
第三节:自定义迭代器
思想:任何实现Iterator接口的对象都可以作为迭代器使用
class Counter {
//Counter的实例应该迭代limit次
constructor(limit) {
this.count = 1;
this.limit = limit;
}
next() {
if(this.count <= this.limit){
return {
done:false,value:this.count++};
} else {
return {
done:true,value:undefined};
}
}
[Symbol.iterator]() {
return this;
}
}
//尝试
let counter <