es6中 类数组 字符串 数组都部署了iterate接口(mixin模式)
像...运算符和for of等都是调用了iterator接口
//类数组自己实现一个iterator
let obj={
0:1,
1:2,
length:2,
[Symbol.iterator] : function () {
let self=this;
let index=0;
return {
next: function () {
return index<=self.length-1?{value:self[index++],done:false}:{value:undefind,done:true};
}
};
}
}
或者
let iterable = {
0: 'a',
1: 'b',
2: 'c',
length: 3,
[Symbol.iterator]: Array.prototype[Symbol.iterator]
};
使用:a=obj[symbol.iterator]();
a.next();
a.next();
消费iterator接口的方式
function testIterator(obj){
let a=obj[symbol.iterator]();
for(let i=0;i<obj.length;i++){
if(a.next().done){
return ;
}
let val= a.next().value;
}
}