春天的木頭要發(fā)芽

          很累。但不能懶

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            1 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          在prototype框架中的類繼承實(shí)現(xiàn)機(jī)制
          //為Object類添加靜態(tài)方法:extend
          Object.extend = function(destination, source) {
            for(property in source) {
               destination[property] = source[property];
            }
            return destination;
          }
          //通過Object類為每個(gè)對(duì)象添加方法extend
          Object.prototype.extend = function(object) {
            return Object.extend.apply(this, [this, object]);
          }
          Object.extend方法很容易理解,它是Object類的一個(gè)靜態(tài)方法,用于將參數(shù)中source的所有屬性都賦值到destination對(duì)象中,并返回destination的引用。下面解釋一下Object.prototype.extend的實(shí)現(xiàn),因?yàn)镺bject是所有對(duì)象的基類,所以這里是為所有的對(duì)象都添加一個(gè)extend方法,函數(shù)體中的語(yǔ)句如下:
          Object.extend.apply(this,[this,object]);
          這一句是將Object類的靜態(tài)方法作為對(duì)象的方法運(yùn)行,第一個(gè)參數(shù)this是指向?qū)ο髮?shí)例自身;第二個(gè)參數(shù)是一個(gè)數(shù)組,包括兩個(gè)元素:對(duì)象本身和傳進(jìn)來的對(duì)象參數(shù)object。函數(shù)功能是將參數(shù)對(duì)象object的所有屬性和方法賦值給調(diào)用該方法的對(duì)象自身,并返回自身的引用。有了這個(gè)方法,下面看類繼承的實(shí)現(xiàn):
          <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(){
                //構(gòu)造函數(shù)
          }
          //定義類class1的成員
          class1.prototype={
                method:function(){
                     alert("class1");
                },
                method2:function(){
                     alert("method2");
                }

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

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

          posted on 2009-11-25 14:23 春木 閱讀(98) 評(píng)論(0)  編輯  收藏 所屬分類: JavaScript

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁陵县| 当阳市| 彝良县| 道孚县| 石首市| 宽城| 寿宁县| 平罗县| 新沂市| 鹤山市| 平乐县| 梁平县| 安康市| 筠连县| 涟源市| 衡东县| 绥滨县| 德清县| 万全县| 南木林县| 青川县| 公安县| 黑龙江省| 青神县| 二连浩特市| 通化市| 乐山市| 饶阳县| 平邑县| 景泰县| 奉新县| 班玛县| 临汾市| 炎陵县| 天祝| 阿勒泰市| 平乡县| 克东县| 阜阳市| 敦化市| 宜春市|