原始迭代协议

非标准。旧式迭代器协议是一个特定于 SpiderMonkey 的功能,在 Firefox 58+ 中删除。对于面向未来的用法,请考虑使用  for..of 循环与 迭代协议

废弃的 Firefox 专用迭代器协议

Firefox,在版本 26 之前实现了另一个迭代器协议,类似于标准的 ES2015 迭代器协议

一个对象实现了 next() 方法,并在迭代结束时抛出 StopIteration,它就是一个旧式迭代器。

属性
next 返回值的零个参数函数。

旧式迭代器与 ES2015 迭代器的区别

  • 在调用 next 的时候立即返回相应的值,不会返回一个占位符对象的值(value)属性。
  • 通过抛出 StopIteration 对象表示迭代结束。

旧迭代器协议示例

function makeIterator(array){
    var nextIndex = 0;

    return {
       next: function(){
           if(nextIndex < array.length){
               return array[nextIndex++];
           else
               throw new StopIteration();
       }
    }
}

var it = makeIterator(['yo', 'ya']);

console.log(it.next()); // 'yo'
console.log(it.next()); // 'ya'
try{
    console.log(it.next());
}
catch(e){
    if(e instanceof StopIteration){
         // iteration over
    }
}

参见