春天的木頭要發芽

          很累。但不能懶

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            1 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          2009年11月25日 #

          在prototype框架中的類繼承實現機制
          //為Object類添加靜態方法:extend
          Object.extend = function(destination, source) {
            for(property in source) {
               destination[property] = source[property];
            }
            return destination;
          }
          //通過Object類為每個對象添加方法extend
          Object.prototype.extend = function(object) {
            return Object.extend.apply(this, [this, object]);
          }
          Object.extend方法很容易理解,它是Object類的一個靜態方法,用于將參數中source的所有屬性都賦值到destination對象中,并返回destination的引用。下面解釋一下Object.prototype.extend的實現,因為Object是所有對象的基類,所以這里是為所有的對象都添加一個extend方法,函數體中的語句如下:
          Object.extend.apply(this,[this,object]);
          這一句是將Object類的靜態方法作為對象的方法運行,第一個參數this是指向對象實例自身;第二個參數是一個數組,包括兩個元素:對象本身和傳進來的對象參數object。函數功能是將參數對象object的所有屬性和方法賦值給調用該方法的對象自身,并返回自身的引用。有了這個方法,下面看類繼承的實現:
          <script language="JavaScript" type="text/javascript">
          <!--
          //定義extend方法
          Object.extend = function(destination, source) {
            for (property in source) {
               destination[property] = source[property];
            }
            return destination;
          }
          Object.prototype.extend = function(object) {
            return Object.extend.apply(this, [this, object]);
          }
          //定義class1
          function class1(){
                //構造函數
          }
          //定義類class1的成員
          class1.prototype={
                method:function(){
                     alert("class1");
                },
                method2:function(){
                     alert("method2");
                }

          }
          //定義class2
          function class2(){
                //構造函數
          }
          //讓class2繼承于class1并定義新成員
          class2.prototype=(new class1()).extend({
                method:function(){
                     alert("class2");
                }
          });

          //創建兩個實例
          var obj1=new class1();
          var obj2=new class2();
          //試驗obj1和obj2的方法
          obj1.method();
          obj2.method();
          obj1.method2();
          obj2.method2();
          //-->
          </script>
          從運行結果可以看出,繼承被正確的實現了,而且派生類的額外成員也可以以列表的形式加以定義

          posted @ 2009-11-25 14:23 春木 閱讀(98) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 孟连| 翼城县| 巴塘县| 五华县| 常山县| 石楼县| 莒南县| 通渭县| 嵊泗县| 米易县| 皋兰县| 克拉玛依市| 灌阳县| 肃北| 东宁县| 沁阳市| 三明市| 淄博市| 乐安县| 苍山县| 新巴尔虎右旗| 郸城县| 富阳市| 怀仁县| 永和县| 通海县| 宁陵县| 林口县| 碌曲县| 菏泽市| 饶阳县| 普宁市| 洮南市| 京山县| 元阳县| 酉阳| 奉贤区| 临颍县| 襄樊市| 邻水| 涞水县|