@1 迭代器:是一种机制,可以为各种不同的数据结构提供统一的循环和迭代规范;for of循环就
? ? ? ?是基于迭代器规范。
class Iterator {
? ? ? ? constructor(assemble){
? ? ? ? ? ? ? ? self = this
? ? ? ? ? ? ? ? self.assemble = assemble
? ? ? ? ? ? ? ? self.index= 0
????????}
????????
? ? ? ? next() {
? ? ? ? ? ? ? ? if(seif.index>assemble.length-1){
? ? ? ? ? ? ? ? ? ? ? ? return {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? value:undefiend,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? done:true
????????????????????????}
????????????????}
? ? ? ? ? ? ? ? return {
? ? ? ? ? ? ? ? ? ? ? ? value: self.assemble[index++],
? ? ? ? ? ? ? ? ? ? ? ? done:false
????????????????}
????????}
}
let itor = new Iterator(10,20,30,40)
console.log(itor.next()) // {value:10,done:false}?
console.log(itor.next()) // {value:20,done:false}?
........
@2 具有迭代器规范类型的数据
? ? ? ? Array.prototype[symbol.Iterator];
? ? ? ? String.prototype
? ? ? ? arguments[symbol.iterator]
@3 对象不具有迭代器规范
? ? ? ? 给对象原型上面添加迭代器规范
? ? ? ? Object.prototype.[symbol.iterator]? = function () {
? ? ? ? ? ? ? ? self = this?
? ? ? ? ? ? ? ? keys = Reflect.ownKeys(self)
? ? ? ? ? ? ? ? index = 0?
? ? ? ? ? ? ? ? return {
? ? ? ? ? ? ? ? ? ? ? ? next( ) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if( index > keys.length-1) {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? value:undefiend,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? done:true
???????????????????????????????????????? }
???????????????????????????????? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? value: self.keys[index],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? done:false
???????????????????????????????? }
????????????????????????}
????????????????}
????????????????
????????}
? ? ? ? let obj = { name:'zs', age:12,sex:'男'}??