Iteratorパターン

下記例ではIteratorの実装を変更するだけで利用例を変更することなく列挙する順番を変更することが可能です。

サンプル

利用例
var i = new Iterator(['foo0','bar0','foo1','bar1']);
while(i.hasNext()){
  document.write(i.next());
};
実装例#01 foo0, bar0, foo1, bar1で列挙される
function Iterator(ary)
{
  var i = 0;
  var stop = ary.length - 1;

  return {
    hasNext : function()
    {
      if(i > stop) return false;
      return true;
    },
    next : function(){
      return ary[i++];
    }
  };
};
実装例#02 bar1, foo1, bar0, foo0で列挙される
function Iterator(ary)
{
  var i = ary.length - 1;
  var stop = 0;

  return {
    hasNext : function()
    {
      if(i < stop) return false;
      return true;
    },
    next : function(){
      return ary[i--];
    }
  };
};