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便于我們理解代碼