在对象和数组进行循环遍历时,我们通常会使用for-in
、for-of
,众所周知,for-of
是无法遍历对象的
COPY
1 | let obj = {a:1, b:2, c:3}; |
因为对象内部是没有迭代器对象(iterator
)的,那么我们是否手动让对象实现可迭代呢?
ES6 规定,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性,或者说,一个数据结构只要具有 Symbol.iterator 属性,就可以认为是”可遍历的”(iterable)
我们通过对对象设置原型属性来实现
COPY
1 | Object.prototype[Symbol.iterator] = function(){ |
可以看出每次迭代,其实就是在调用迭代器的 next()
方法。其中 done
表示遍历是否完成,那么我们就可以通过改变done的状态来结束遍历。
比如:
COPY
1 | ... ... |