protoype.js學(xué)習(xí)(二)

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

          2、Array ,繼承Enumerable,并實(shí)現(xiàn)了Enumerable方法_each().
          ????????????
          /**
          ?????*?iterator是作為參數(shù)傳入的,實(shí)際使用的是哪個(gè)函數(shù)或?qū)ο蟮姆椒ㄊ歉鶕?jù)給定對象的性質(zhì)決定的
          ?????*?iterator是個(gè)函數(shù)類型的參數(shù),每個(gè)具體的對象將實(shí)際的迭代器作為函數(shù)作為參數(shù)傳入
          ?????*?_each:?function(iterator)是Enumerable中定義方法的實(shí)現(xiàn)
          ?????
          */
          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
          主站蜘蛛池模板: 丰镇市| 建始县| 故城县| 沁源县| 开平市| 阿合奇县| 富宁县| 伊宁县| 廊坊市| 尉犁县| 尖扎县| 察隅县| 隆子县| 清新县| 莱阳市| 奉化市| 疏附县| 华蓥市| 平定县| 巫溪县| 扎兰屯市| 武隆县| 屏南县| 铜梁县| 苗栗市| 绥芬河市| 民丰县| 高阳县| 方城县| 阿图什市| 正蓝旗| 福建省| 江西省| 郑州市| 全州县| 长沙县| 广州市| 定南县| 柘城县| 柳林县| 霍林郭勒市|