2019-01-07 Eventproxy trigger事件詳解

eventproxy就是事件訂閱發(fā)布的實(shí)現(xiàn),其中trigger函數(shù)理解需要自己仔細(xì)閱讀一下。

Eventproxy.prototype.trigger = function(name, data) {
    var list, callback, i, l;
    var both = 2; // 用來區(qū)分兩種情況,一種是自定義事件,一種是全局事件
    var calls = this._callbacks;
    while (both--) {
        ev = both ? name : ALL_EVENT;
        list = calls[ev];
        console.log(ev)
        if(!list) continue;

        for(i = 0, l = list.length; i < l; i++) {
            if(!(callback = list[i])) {
                list.splice(i,1);
                i--;
                l--;
            }else{
                // arguments 賦值
                var args = [];
                var start = both ? 1 : 0;
                for(var j = start; j < arguments.length; j++) {
                    args.push(arguments[j]);
                }

                callback.apply(this, args);
            }
        }
    }
    return this;
};

both 在源代碼中沒有說明,仔細(xì)閱讀過后是兩種情況的分類,就是分別遍歷自定義事件的數(shù)組和全局事件的數(shù)組中滿足相等的函數(shù),進(jìn)行觸發(fā)

var start = both ? 1 : 0;
var args = [].slice.apply(arguments)
callback.apply(this, args.slice(start));

其中args 賦值部分其他實(shí)現(xiàn),源代碼部分兼容性更好

用好編輯器的js debug便于我們理解代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容