jasmine214--love

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

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

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

          Object.extend(Object, {
          inspect:
          function(object) {?? // 一個靜態(tài)方法, 傳入一個對象, 返回對象的字符串表示
          ??? try {
          ?????
          if (object == undefined) return'undefined'; // 處理undefined情況
          ????? if (object ==null) return'null';???? // 處理null情況
          ????? // 如果對象定義了inspect方法, 則調(diào)用該方法返回, 否則返回對象的toString()值
          ????? return object.inspect ? object.inspect() : object.toString();
          ??? }
          catch (e) {
          ?????
          if (e instanceof RangeError) return'...'; // 處理異常情況
          ????? throw e;
          ??? }
          },
          keys:
          function(object) {???? // 一個靜態(tài)方法, 傳入一個對象, 返回該對象中所有的屬性, 構(gòu)成數(shù)組返回
          ??? var keys = [];
          ???
          for (var property in object)
          ????? keys.push(property);????
          // 將每個屬性壓入到一個數(shù)組中
          ??? return keys;
          },
          values:
          function(object) {?? // 一個靜態(tài)方法, 傳入一個對象, 返回該對象中所有屬性所對應的值, 構(gòu)成數(shù)組返回
          ??? var values = [];
          ???
          for (var property in object) values.push(object[property]); // 將每個屬性的值壓入到一個數(shù)組中
          ??? return values;
          },
          clone:
          function(object) {??? // 一個靜態(tài)方法, 傳入一個對象, 克隆一個新對象并返回
          ??? returnObject.extend({}, object);
          }
          });
          主站蜘蛛池模板: 铜川市| 通许县| 思茅市| 华坪县| 修文县| 呼图壁县| 获嘉县| 会东县| 民乐县| 彰武县| 介休市| 莆田市| 衡东县| 河南省| 滁州市| 曲阜市| 三原县| 新化县| 黄石市| 浦江县| 沅陵县| 通化县| 伽师县| 四会市| 乐安县| 和顺县| 盐亭县| 苏尼特左旗| 莱芜市| 夹江县| 马鞍山市| 天柱县| 景东| 东明县| 澄迈县| 甘泉县| 乐山市| 南川市| 思南县| 饶平县| 新安县|