<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    samtiger


    QQ:418148757
    Name:yangchuan
    數據加載中……
    Ext下類函數定義

    一:Ext下類函數定義
    extcore通過:Ext.extend方法來創建類(構造函數),這個類以下用sb代替。
    這個類函數默認會有這些屬性(類屬性)。
    superclass:父類,也就是第一個或第二個參數的prototype屬性對象。(具體根據傳入的參數類型決定)
    superclass(): 父類,(sb.propertype下) 這是一個函數,該函數返回父類的propertype對象
    supr():同上
    constructor():構造函數,(sb函數的propertype對象下)實際上引用的就是sb函數自己。
    override(o):重寫方法,(sb函數下),調用的是 Ext.override(sb, o);也就是將o中的屬性復制到sb的propertype下。
    override(o):重寫方法,(sb.propertype下)也就是將o的屬性復制到sb的propertype下。
    extend(o):(sb函數下),該函數調用的是Ext.extend(sb.o);

    Ext.extend(sb, sp, overrides)方法有三個參數,這三個參數有一定的類型要求:
    sb 一般情況下是一個類函數。
    sp:有兩種情況:一種是類函數,另一種是:一個Object對象。
    overrides:Object對象,通過Ext.override(sb, overrides);方法覆蓋類對象的屬性。

    通過代碼分析,可以看出Ext.extend方法有兩個應用:
    第一:
    因為js沒有重構語法,所以我們沒辦法定義js方法的重構,而上邊這個extend方法,可以說是一種重構的實現。因為,我們通過代碼的分析,我們可以總結出extend方法的參數傳

    遞方式。(用面向對象語言來表示的話,如下結構)
    1:extend(Calss sb,Object sp);
    2:extend(Calss sb,Class sp);
    3:extend(Calss sb,Class sp,Object overrides);
    第一種方式目的是定義一個類函數,這個類函數的父類為sb類函數,屬性方法的定義在sp對象中完成。
    比如: var Student = Ext.extend(Person,{
        constructor:function(old){
      this.age=old;
     },
       name:'sam'}
    })
    其實通過
      if(Ext.isObject(sp)){
                        overrides = sp;
                        sp = sb;
                        sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
                    }

    我們可以看出Ext.extend

    只有在sp.constructor==Object.prototype.constructor的時候,才創建并返回一個函數,該函數就一句話,

    就是調用sb(即父類構造函數)

    如果sp.constructor==Object.prototype.constructor

    那么sp應該是這樣,是一個對象直接量,或者new Object方式創建的對象,且它們都沒有顯示定義

    constructor方法。

    以下這幾種情況都不會有sp.constructor==Object.prototype.constructor。

    1:var obj = new Object(); 

    obj.constructor=function(){...};

    Ext.extend(sb,obj) //extend 返回的類就是constructor函數

    2: var obj = {

    constructor:function(){...}

    };

    Ext.extend(sb,obj) //extend 返回的類就是constructor函數

    3: var obj = new function(){...}();  

    Ext.extend(sb,obj) //extend返回的類就是這個匿名函數

    4: var obj = new function(){

    this.constructor=function(){...} 

    }();

    Ext.extend(sb,obj) //extend 返回的類就是constructor函數。


    總結 :其實很簡單,Ext.extend這么做的目的是要說,定義一個類,構造函數就是constructor方法,如果沒顯示定義這個方法,那么類就使用父類函數作為新類的構造函數。


    var A=function(){
       alert("this is a");
    }
    var B=function(){
       alert("this is b");
    }

    var SubA = Ext.extend(A,new B());
    var subA = new SubA();//這里就會彈出 this is  a 的提示。
    第二種方式:修改現有類的類結構
    2:extend(Calss sb,Class sp);
    這個方法的目的其實之一種包裝,是將sb繼承于sp下,不管sb是不是ext框架下的類,在這個方法執行后sb就成了ext框架
    下的類結構了
    3:extend(Calss sb,Class sp,Object overrides);
    除了有第二種方法的功能外,還額外的給sb添加或覆蓋新的方法或屬性
    Ext.extend(Person,DongWu);
    Ext.extend(Person,DongWu,{sex:'man'});

    posted on 2010-06-29 07:07 sam.chuan.yang 閱讀(1114) 評論(0)  編輯  收藏 所屬分類: javascript 筆記


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 色天使亚洲综合一区二区| 亚洲精品字幕在线观看| 亚洲中文字幕一二三四区苍井空| 九九99热免费最新版| 精品亚洲一区二区三区在线观看 | 久久精品国产亚洲av麻豆蜜芽| h视频在线免费看| 精品久久亚洲中文无码| 最近中文字幕mv手机免费高清| 亚洲乱亚洲乱妇24p| 国产91久久久久久久免费| 日韩精品亚洲专区在线影视| 亚洲国产免费综合| 久久免费视频一区| 久久99亚洲网美利坚合众国 | 欧洲人免费视频网站在线| 亚洲网址在线观看你懂的| 亚洲免费观看在线视频| 亚洲av乱码一区二区三区| 日韩在线视频免费看| 一级做a爰片性色毛片免费网站| 亚洲综合精品香蕉久久网| 最近最新高清免费中文字幕 | 亚洲午夜一区二区三区| 免费jlzzjlzz在线播放视频| 中国一级特黄的片子免费 | 免费国产黄网站在线观看视频| 亚洲AV无码专区在线亚| 免费一级毛片不卡不收费| 嫩草影院在线播放www免费观看| 国产精品亚洲综合久久| 亚洲伊人久久综合中文成人网| 无码专区AAAAAA免费视频| 亚洲人成色99999在线观看| 亚洲中文无韩国r级电影| 在线a免费观看最新网站| 美女尿口扒开图片免费| 精品亚洲成AV人在线观看| 国产婷婷高清在线观看免费| 久久精品视频免费播放| 久久精品熟女亚洲av麻豆|