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

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

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

    沒有眼淚
    Don't Cry!
    posts - 13,comments - 44,trackbacks - 0
        項目中經常使用createDelegate()方法來創建代理函數,從而改變當前函數中this的作用域.看下了源碼,發現是通過js中的apply()方法來實現,想想也只能通過apply()或者call()方法來實現,因為js中只有這2個方法提供了改變當前函數內部this作用域的功能.此外,Ext中很多地方用到了call()和apply()方法,要想看懂源碼,則必須先搞清這2個方法的用法.
        createDelegate方法聲明為:
     1createDelegate : function(obj, args, appendArgs){
     2        var method = this;
     3        return function() {
     4            var callArgs = args || arguments;
     5            if(appendArgs === true){
     6                callArgs = Array.prototype.slice.call(arguments, 0);
     7                callArgs = callArgs.concat(args);
     8            }
    else if(typeof appendArgs == "number"){
     9                callArgs = Array.prototype.slice.call(arguments, 0); // copy arguments first
    10                var applyArgs = [appendArgs, 0].concat(args); // create method call params
    11                Array.prototype.splice.apply(callArgs, applyArgs); // splice them in
    12            }

    13            return method.apply(obj || window, callArgs);
    14        }
    ;
    15    }
    ,
    其中obj表示函數內部this作用域的范圍,args是數組,appendArgs是"Boolean或Number",如果appendArgs是Boolean型的且值為true,那么args參數將跟在調用代理方法時傳入的參數后面組成數組一起傳入當前方法,否則只傳入args,如果appendArgs為Number型,那么args將插入到appendArgs指定的位置.
    注意點:
    1.函數內部的arguments關鍵字是函數執行時動態創建的,用來存儲調用函數時所傳入參數.這里第4行的arguments   并不指調用createDelegate方法所傳入的參數(obj,args,appendArgs),而是指調用return function()時所傳入的參數,即調用代理函數時所傳入的參數.而args和appendArgs就是調用createDelegate方法時所傳入的參數.總的來說,函數是在定義它的作用域中執行,而不是在調用它的作用域中執行.但也有特殊,比如這里的arguments.
    2.call和apply的區別.
    二者的第一個參數都是函數內部this的作用域,call的參數只能作為一串參數傳入,而apply可以傳入數組或arguments對象.如
    fun.call(window,args0,args1,.....);
    fun.apply(window,[1,2,3]);
    但要注意的是apply方法傳遞到函數內部的參數實際也是作為一個個參數傳遞的.如果在fun內部測試arguments.length的話,則長度為3.同樣,我們可以采用arguments[0],arguments[1],arguments[2]來分別引用1,2,3三個參數,而不是用arguments[0][0],arguments[0][1],arguments[0][2]來引用3個參數.這樣才能解釋11行的代碼.
    posted on 2008-04-30 17:11 zhangchao 閱讀(2664) 評論(0)  編輯  收藏 所屬分類: Ext

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


    網站導航:
     
    主站蜘蛛池模板: 大妹子影视剧在线观看全集免费 | 亚洲美日韩Av中文字幕无码久久久妻妇| 蜜臀91精品国产免费观看| 免费国产a国产片高清网站| 亚洲中文字幕在线观看| 亚洲avav天堂av在线不卡| 亚洲精品综合在线影院| 美女的胸又黄又www网站免费| 亚洲AV永久无码精品一区二区国产| 亚洲成a人片在线观看国产| 国产亚洲3p无码一区二区| 亚洲精品自在线拍| 亚洲av成人片在线观看| 两个人看的www免费高清| 久久精品免费全国观看国产| 免费看男女下面日出水视频| 亚洲va久久久噜噜噜久久天堂| 亚洲另类小说图片| 免费观看四虎精品成人| 日本在线看片免费人成视频1000| 成人性生活免费视频| 国产亚洲精品资源在线26u| 国产精品亚洲精品| 久久精品免费大片国产大片| 精品久久久久久久久免费影院| 亚洲av无码国产精品色在线看不卡 | 久久精品蜜芽亚洲国产AV| 亚洲人成色在线观看| a色毛片免费视频| 毛片免费视频观看| 亚洲精品成人片在线播放| 亚洲一卡2卡3卡4卡5卡6卡| 中文在线观看国语高清免费| 免费无码肉片在线观看| 亚洲精品美女久久久久99| 亚洲中文字幕乱码AV波多JI| 中国国语毛片免费观看视频| 毛片免费观看的视频| 亚洲码国产精品高潮在线| 亚洲av无码专区国产乱码在线观看| 亚洲首页国产精品丝袜|