Javascript 学习笔记 1
学过 Python 的同学可能都知道这个玩意,因为这玩意在 Python 还算比较常用,而在 Javascript 中,则不这么知名了,今天就来讲讲。
首先,我想实现一个功能,一个 Object 里,有 from 和 to 两个 Key,当你用 for .. of .. 去迭代它时,会依次返回 [from, to) 左闭右开的一个数列,那么该咋实现呢。
先把这个 Object 写出来:
/* Iterable */
const obj = {
from: 0,
to: 5
};
接下来,我们就要对 obj 进行量身定制,因为目前它还不可迭代,所以要把它变成可迭代对象,这时候就要用到 Symbol 对象中的 iterable 函数:
obj[Symbol.iterator] = function () {
let current = this.from; // 记录开始值
const end = this.to; // 记录结束值
// iterable函数要求返回一个包含next方法的对象
return {
next() {
if (current <= end) {
return { value: current++, done: false }; // 要求返回一个包含value和done的对象
// done表示是否结束,false为还没有迭代完毕
}
return { value: current, done: true }; // 也可以只返回done而不包含value
}
}
}
实际上每次用for .. of .. 去迭代一个对象,只是去调用它的next方法,所以你同样可以这样写:
const obj = {
from: 0,
to: 5,
[Symbol.iterator]() {
this.current = this.from; // this是obj
return this;
},
next() {
if (this.current <= this.to) {
return { value: this.current++, done: false };
}
return { value: this.current, done: true };
}
};
最后,你就得到了一个可迭代对象:
for (let i of obj) {
console.log(i)
}
// 返回:
/*
0
1
2
3
4
5
*/
第一次写教程向的文章,很生疏,语言可能比较僵硬,以后会改进的,感谢大家的支持。