jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          js繼承的實現---object.extend(d,s)方法

          Posted on 2010-06-20 21:56 幻海藍夢 閱讀(18730) 評論(0)  編輯  收藏 所屬分類: JS
          http://www.cnblogs.com/5201314/archive/2009/05/22/1487213.html
          Object.extend
          = function (destination, source) {
          for ( var property in source) {
          ??? destination[property]
          = source[property];
          }
          return destination;
          }
          Prototype 對Object類進行的擴展主要通過一個靜態函數Object.extend(destination, source)實現了JavaScript中的繼承。 從語義的角度, Object.extend(destination, source)方法有些不和邏輯, 因為它事實上僅僅實現了從源對象到目標對象的全息拷貝。不過你也可以這樣認為:由于目標對象擁有了所有源對象所擁有的特性, 所以看上去就像目標對象繼承了源對象(并加以擴展)一樣。另外, Prototype對Object擴展了幾個比較有用的靜態方法, 所有其他的類可以通過調用這些靜態方法獲取支持。
          JScript code
          Object.extend=function(destination, source) { // 一個靜態方法表示繼承, 目標對象將擁有源對象的所有屬性和方法
          for (var property in source) {
          ??? destination[property]
          = source[property];?? // 利用動態語言的特性, 通過賦值動態添加屬性與方法
          }
          return destination;?? // 返回擴展后的對象
          }

          Object.extend(Object, {
          inspect:
          function(object) {?? // 一個靜態方法, 傳入一個對象, 返回對象的字符串表示
          ??? try {
          ?????
          if (object == undefined) return'undefined'; // 處理undefined情況
          ????? if (object ==null) return'null';???? // 處理null情況
          ????? // 如果對象定義了inspect方法, 則調用該方法返回, 否則返回對象的toString()值
          ????? return object.inspect ? object.inspect() : object.toString();
          ??? }
          catch (e) {
          ?????
          if (e instanceof RangeError) return'...'; // 處理異常情況
          ????? throw e;
          ??? }
          },
          keys:
          function(object) {???? // 一個靜態方法, 傳入一個對象, 返回該對象中所有的屬性, 構成數組返回
          ??? var keys = [];
          ???
          for (var property in object)
          ????? keys.push(property);????
          // 將每個屬性壓入到一個數組中
          ??? return keys;
          },
          values:
          function(object) {?? // 一個靜態方法, 傳入一個對象, 返回該對象中所有屬性所對應的值, 構成數組返回
          ??? var values = [];
          ???
          for (var property in object) values.push(object[property]); // 將每個屬性的值壓入到一個數組中
          ??? return values;
          },
          clone:
          function(object) {??? // 一個靜態方法, 傳入一個對象, 克隆一個新對象并返回
          ??? returnObject.extend({}, object);
          }
          });
          主站蜘蛛池模板: 新民市| 库伦旗| 万安县| 常德市| 潞城市| 福安市| 衡南县| 南华县| 阿坝| 巩留县| 凤山县| 广宁县| 铁力市| 怀柔区| 尖扎县| 潮安县| 兴化市| 德州市| 灵台县| 福贡县| 高州市| 岱山县| 北川| 瑞安市| 丰城市| 八宿县| 屏东县| 克什克腾旗| 丰顺县| 安龙县| 东乌珠穆沁旗| 平利县| 喜德县| 马边| 二连浩特市| 石狮市| 南汇区| 南皮县| 长白| 深圳市| 江都市|