eventproxy就是事件订阅发布的实现,其中trigger函数理解需要自己仔细阅读一下。
Eventproxy.prototype.trigger = function(name, data) {
var list, callback, i, l;
var both = 2; // 用来区分两种情况,一种是自定义事件,一种是全局事件
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 在源代码中没有说明,仔细阅读过后是两种情况的分类,就是分别遍历自定义事件的数组和全局事件的数组中满足相等的函数,进行触发
var start = both ? 1 : 0;
var args = [].slice.apply(arguments)
callback.apply(this, args.slice(start));
其中args 赋值部分其他实现,源代码部分兼容性更好
用好编辑器的js debug便于我们理解代码
网友评论