1.支持fn參數中使用this關鍵字
2.相同fn綁定無效
缺點:
非ie下不能直接使用匿名函數直接當參數傳遞,這個誰有比較好的解決辦法么?















































提升了一下執行效率:
CE.Event = {
ecount : 1,
handler : function(e){
e = e || window.event;
if(this.evns[e.type]){
for(var evn in this.evns[e.type]){
this.evns[e.type][evn].call(this,e);
}
}
},
bind : function(obj, act, fn, capture){
if(window.addEventListener){
obj.addEventListener(act,fn,capture || false);
}else{
if(!fn.id){fn.id = CE.Event.ecount++};
if(!obj.evns){obj.evns = {}};
if(!obj.evns[act]){
obj.evns[act] = {};
if(obj["on" + act]){
obj.evns[act][0] = obj["on" + act];
}
}else{
for(var evn in obj.evns[act]){
if(evn.id === fn.id){return;}
}
}
obj.evns[act][fn.id] = fn;
obj["on" + act] = CE.Event.handler;
}
},
unbind : function(obj, act, fn, capture){
if(window.removeEventListener){
obj.removeEventListener(act,fn,capture || false);
}else{
if(obj.evns && obj.evns[act]){
try{
delete obj.evns[act][fn.id];
}catch(e){
obj.evns.act[fn.id] = null;
}
return;
}
}
}
};
ecount : 1,
handler : function(e){
e = e || window.event;
if(this.evns[e.type]){
for(var evn in this.evns[e.type]){
this.evns[e.type][evn].call(this,e);
}
}
},
bind : function(obj, act, fn, capture){
if(window.addEventListener){
obj.addEventListener(act,fn,capture || false);
}else{
if(!fn.id){fn.id = CE.Event.ecount++};
if(!obj.evns){obj.evns = {}};
if(!obj.evns[act]){
obj.evns[act] = {};
if(obj["on" + act]){
obj.evns[act][0] = obj["on" + act];
}
}else{
for(var evn in obj.evns[act]){
if(evn.id === fn.id){return;}
}
}
obj.evns[act][fn.id] = fn;
obj["on" + act] = CE.Event.handler;
}
},
unbind : function(obj, act, fn, capture){
if(window.removeEventListener){
obj.removeEventListener(act,fn,capture || false);
}else{
if(obj.evns && obj.evns[act]){
try{
delete obj.evns[act][fn.id];
}catch(e){
obj.evns.act[fn.id] = null;
}
return;
}
}
}
};