protoype.js學習(二)

          ??????最近一直在看prototype.js的源代碼,個人覺得Enumerable的each()最難理解。
          今天大概看明白了,.
          1、Enumerable
          ??????
          //定義了兩個異常對象,主要用于迭代控制
          var?$break?=?new?Object();
          var?$
          continue?=?new?Object();
          /**
          ?*?Enumerable可以看作一個接口,_each(function(value))則看作接口中定義的定義的抽象方法
          ?*?_each是由Enumerable的繼承類Array實現的.
          ?*?_each中的參數是個函數,即迭代器
          ?*?????????????????function(value)?{
          ?*????????????????try?{
          ?*????????????????????iterator(value,?index++);
          ?*????????????????????}?catch?(e)?{
          ?*????????????????????if?(e?!=?$continue)?throw?e;
          ?*????????????????????}
          ?*????????????????}
          ?*?????將實際的迭代器作為參數傳遞給Array中定義的_each()方法
          ?*??? index計數器的作用是用于告訴迭代器當前執行到第幾個元素
          ?
          */
          var?Enumerable?
          =?{
          ????each:?function(iterator)?{
          ????????var?index?
          =?0;
          ????????
          try?{
          ????????????
          this._each(function(value)?{
          ????????????????
          try?{
          ????????????????????iterator(value,?index
          ++);
          ????????????????}?
          catch?(e)?{
          ????????????????????
          if?(e?!=?$continue)?throw?e;//執行function(value,index)時;
          ????????????????????????????????????????????????
          //如遇異常則拋出($continue為實例化的一個對象,此處意在表明繼續執行下一次操作)
          ????????????????????
          ????????????????}
          ????????????});
          ????????}?
          catch?(e)?{
          ????????????
          if?(e?!=?$break)?throw?e;//執行_each遍歷時如遇異常則拋出($break為實例化的一個對象,
          ????????????????????????????????????????????????
          //此處意在表明退出循環,結束遍歷)
          ????????}
          ????},
          ? //........
          }

          2、Array ,繼承Enumerable,并實現了Enumerable方法_each().
          ????????????
          /**
          ?????*?iterator是作為參數傳入的,實際使用的是哪個函數或對象的方法是根據給定對象的性質決定的
          ?????*?iterator是個函數類型的參數,每個具體的對象將實際的迭代器作為函數作為參數傳入
          ?????*?_each:?function(iterator)是Enumerable中定義方法的實現
          ?????
          */
          Object.extend(Array.prototype,?{
          ????_each:?function(iterator)?{
          ????????
          for?(var?i?=?0;?i?<?this.length;?i++)
          ????????????iterator(
          this[i]);
          ????},
          ???
          //
          }
          posted on 2006-12-19 16:07 windfree 閱讀(440) 評論(0)  編輯  收藏 所屬分類: javascriptajax
          主站蜘蛛池模板: 郴州市| 沾益县| 崇信县| 神农架林区| 张家川| 德江县| 炉霍县| 竹山县| 平和县| 榆树市| 郎溪县| 突泉县| 英吉沙县| 始兴县| 友谊县| 武山县| 措勤县| 黎川县| 林周县| 福安市| 平昌县| 建瓯市| 曲水县| 五原县| 穆棱市| 伊川县| 威远县| 陵水| 明星| 闵行区| 江都市| 安阳县| 无棣县| 宜春市| 卢湾区| 阿尔山市| 房产| 西乡县| 云阳县| 重庆市| 南平市|