js迭代器模式

// 迭代器模式
/**
 * 1 通常有一个包含某种数据集合的对象
 * 2 该数据集合能够提供一个简单的方法,能够访问数据中的每一项
 */
// es5 实现
let Arrdata = (function () {
    let index = 0; // 保存当前的下标
    let data = [1,2,3,4,5]// 复杂的数据集合
    let length = data.length; // 保存长度
    return {
        // 访问下一个元素
        next() {
            let ele;
            if(!this.hasNext()) return null;
            ele = data[index];
            index++;
            return ele;
        },
        hasNext() { // 是否有下一个
            return index < length;
        },
        rewind() { // 重置指针
            indx = 0;
        },
        current() { // 获取当前值
            return data[index];
        }
    }

})();
// 检验迭代器
while(Arrdata.hasNext()) {
    console.log(Arrdata.next()); // 1,2,3,4,5
}
console.log(Arrdata.next()); // null


// es6 中generator函数实现
let a = function *() {
    let index = 0;// 保存当前的下标
    let data = [1,2,3,4,5];// 复杂的数据集合,例子中用一个简单的数组表示
    let length = data.length;// 保存长度
    while(index < length) {
        yield data[index];
        index++;
    }
    return null;

};
let b = a();
console.log(b.next().value); //1
console.log(b.next().value); //2
console.log(b.next().value);//3
console.log(b.next().value);//4
console.log(b.next().value);//5
console.log(b.next().value);//null
posted @ 2020-04-20 20:50  风中的猫  阅读(311)  评论(0编辑  收藏  举报