国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js基礎(chǔ) jQuery的Callback入門及原理分析 筆記

lastSeries / 1015人閱讀

摘要:概念解讀事件函數(shù)了解事件通常與函數(shù)配合使用,這樣可以通過發(fā)生的事件來驅(qū)動(dòng)函數(shù)的執(zhí)行。作用用于管理函數(shù)隊(duì)列。往內(nèi)部隊(duì)列添加的函數(shù)保持唯一,不能重復(fù)添加。調(diào)用后開放容器,添加容器的處理函數(shù)將會(huì)立即執(zhí)行。

概念解讀

事件函數(shù)了解Callbacks
事件通常與函數(shù)配合使用,這樣可以通過發(fā)生的事件來驅(qū)動(dòng)函數(shù)的執(zhí)行。
 原則:一個(gè)事件對(duì)應(yīng)一個(gè)事件函數(shù),在一個(gè)事件對(duì)應(yīng)多個(gè)事件函數(shù)的情況下,后者會(huì)覆蓋前者。通過添加數(shù)組的方法,實(shí)現(xiàn)一對(duì)多。
callbacks則是把這些處理成一個(gè)可控制的容器。

作用:用于管理函數(shù)隊(duì)列。
使用:通過add添加處理函數(shù)到隊(duì)列中,通過fire去執(zhí)行這些處理函數(shù)(按照函數(shù)的添加順序依次執(zhí)行處理函數(shù))。

參數(shù):字符串參數(shù)的形式 支持4中特定的功能。

once    函數(shù)隊(duì)列只執(zhí)行一次 默認(rèn) fire調(diào)用后關(guān)閉容器,add添加容器的處理函數(shù)將不會(huì)執(zhí)行。
unique  往內(nèi)部隊(duì)列添加的函數(shù)保持唯一,不能重復(fù)添加。
stopOnFalse    內(nèi)部隊(duì)列的函數(shù)是一次執(zhí)行的 當(dāng)某個(gè)函數(shù)的返回值是false時(shí) ,停止繼續(xù)執(zhí)行剩下的函數(shù)。
memory         當(dāng)函數(shù)隊(duì)列fire一次過后,內(nèi)部會(huì)記錄當(dāng)前fire的參數(shù),下次調(diào)用的時(shí)候,會(huì)把記錄的參數(shù)傳遞給新添加的函數(shù)并立即執(zhí)行這個(gè)新添加的函數(shù)。fire調(diào)用后開放容器,add添加容器的處理函數(shù)將會(huì)立即執(zhí)行。

插件基本框架

(function(root){
    var_ = {
        callbacks:function(){}
    };
    root._ =_;
})(this)

使用_.callbacks();

callbacks方法內(nèi)是可接收參數(shù)的,所以這里需要對(duì)參數(shù)進(jìn)行處理:

0、無參數(shù)的默認(rèn)處理
1、參數(shù)是string形式 使用typeof進(jìn)行判斷即可,非此類參數(shù)則需要進(jìn)行處理。

typeof options === "string"

2、參數(shù)是多個(gè)的時(shí)候,需要對(duì)參數(shù)進(jìn)行切割,并依次傳入。

createOptions(options) {//定義一個(gè)處理多個(gè)參數(shù)的方法
    var object = optionsCache[options] = {};//再緩存內(nèi)進(jìn)行記錄一次 對(duì)象形式
    options.split(/s+/).forEach(function(value) {//value 切割參數(shù)數(shù)組的每一項(xiàng)
        object[value] = true;//擴(kuò)展對(duì)應(yīng)的value屬性
    });
    return object;//返回出去 支持多種參數(shù)
}

add fire方法的添加

這里我們直接定義一個(gè)對(duì)象,執(zhí)行時(shí)返回當(dāng)前對(duì)象。講add和fire方法添加到對(duì)象即可
var self = {
            add:function(){
                
            },
            fireWidth:function(context,arguments){//控制上下文的綁定

            },
            fire:function(){//用于傳參
                self.fireWidth(this,arguments);
            }
        }
        return self;

接下來處理add 和 fire
add方法需要將傳入的參數(shù)成員進(jìn)行切割、遍歷及成員是函數(shù)的添加到執(zhí)行隊(duì)列。

var args =Array.prototype.slice.call(arguments);//數(shù)組化參數(shù) 存入變量    
args.forEach(function(fn){//遍歷參數(shù)
    if(toString.call(fn)==="[object Function]"){//是function的添加到執(zhí)行隊(duì)列
        list.push(fn);
    }
})

fire則是接收參數(shù),觸發(fā)fireWidth接受參數(shù) 執(zhí)行處理函數(shù),fireWidth的處理函數(shù)即真正在執(zhí)行fire操作的函數(shù)提取到外部。

var fire = function(data){//控制隊(duì)列執(zhí)行的函數(shù)
        }

同時(shí)呢 我們需要以下幾個(gè)變量進(jìn)行存儲(chǔ)及判斷使用

list=[];//定義隊(duì)列
index//index 執(zhí)行參數(shù)的下標(biāo) 
length//參數(shù)長度存放到外邊 減少for循環(huán)內(nèi)的計(jì)算 
testing//添加標(biāo)識(shí),是否是第一次執(zhí)行
memory //memery時(shí)存儲(chǔ)已執(zhí)行的處理函數(shù)
start //存儲(chǔ)已執(zhí)行的下標(biāo)值 
starts// memory時(shí)的已執(zhí)行下標(biāo)值

控制隊(duì)列執(zhí)行函數(shù)根據(jù)memory、傳來的下標(biāo)等、設(shè)置stopOnfalse、 對(duì)執(zhí)行函數(shù)隊(duì)列進(jìn)行判斷及執(zhí)行

memory=options.memory&&data ;
    index=starts||0;
    start = 0;
    testing=true;
    length=list.length;
    for(;index

當(dāng)設(shè)置once時(shí) 非首次執(zhí)行函數(shù)時(shí)要能夠直接執(zhí)行,fireWidth中進(jìn)行處理

if(!options.once || !testing){
    fire(args);
}

當(dāng)設(shè)置memory時(shí) 監(jiān)測參數(shù),add時(shí)記錄何事處理memory 同時(shí)直接執(zhí)行fire即可

if(memory){
    starts = start;
    fire(memory);    
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/105463.html

相關(guān)文章

  • 前端培訓(xùn)-中級(jí)階段(11、12)- 跨域請(qǐng)求原理實(shí)現(xiàn)(2019-08-22期)

    摘要:上節(jié)我們講了同源策略,這節(jié)我們講講如何跨域。當(dāng)這些從的腳本執(zhí)行出錯(cuò),因?yàn)檫`背了同源策略為了保證用戶信息不被泄露,錯(cuò)誤信息不會(huì)顯示出來,取而代之只會(huì)返回一個(gè)。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識(shí)的中心思想,我們開課啦(每...

    binaryTree 評(píng)論0 收藏0
  • Redux入門0x101: 簡介`redux`簡單實(shí)現(xiàn)

    摘要:在我看來它們的關(guān)系不會(huì)比共用開頭更深了,所以我就重新開了一個(gè)頭,但其實(shí)是基于前面寫的資源中文文檔英文文檔官方視頻學(xué)習(xí)歷程當(dāng)初為了學(xué)習(xí),看了許多的材料,中途曾經(jīng)放棄兩次,但是最后還是勇敢的拿起了它,現(xiàn)在終于勉強(qiáng)弄懂。 0x000 概述 這一章開始講redux,其實(shí)是承接前面的react,但其實(shí)作為一個(gè)框架來說,redux和react并沒有太多的關(guān)系,本身是獨(dú)立存在的。在我看來它們的關(guān)系不...

    ssshooter 評(píng)論0 收藏0
  • 前端相關(guān)大雜燴

    摘要:希望幫助更多的前端愛好者學(xué)習(xí)。前端開發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開發(fā)工程師當(dāng)你問起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒有網(wǎng)絡(luò)請(qǐng)求功能的庫。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡單 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 評(píng)論0 收藏0
  • jQuery學(xué)習(xí)筆記

    摘要:提高業(yè)務(wù)編程能力中提供了很多的方法基本都兼容,我們可以使用這些方法快速開發(fā)項(xiàng)目中有的方法提供的思想可以讓我們把項(xiàng)目實(shí)現(xiàn)得更優(yōu)化提高基礎(chǔ)以及一些高級(jí)編程思想分析源碼,學(xué)習(xí)里面類庫封裝的思想和一些方法實(shí)現(xiàn)的原理有時(shí)間把中提供的常用方法都去實(shí)現(xiàn)一 jQuery 提高業(yè)務(wù)編程能力 JQ中提供了很多的方法(基本都兼容),我們可以使用這些方法快速開發(fā)項(xiàng)目 JQ中有的方法提供的思想可以讓我們把...

    GHOST_349178 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<