本例只是以學(xué)習(xí)JS原型鏈為主,如果是對象封裝或其他方法不在考慮?!鞠胍獙?shí)現(xiàn)】:父類調(diào)用 DOM0級事件處理程序,子類調(diào)用IE和DOM2級事件處理程序。實(shí)例化子類可以為元素節(jié)點(diǎn)添加事件和刪除,如果不能滿足則繼續(xù)查找父類中的方法?!締栴}】 感覺是 this的問題。在線調(diào)試地址:http://jsbin.com/dahefo/1?//html??<input?type='button'?value='按鈕'?id='btn'>
//基類?定義初始的DOM0級事件處理程序
function?Basevent(ele,type,func){
??this.ele=ele;
??this.type=type;
}
Basevent.prototype={
??constructor:Basevent,
??addEvent:function(){
?? ele['on'+type]=func;//添加?
??},?
??removeEvent:function(){
?? ele['on'+type]=Null;//刪除
??}?
};
//子類繼承基類?定義DOM2級和IE兼容版本
function?Subevent(ele,type,func){
??Basevent.apply(this,arguments);
}
Subevent.prototype=Object.create(Basevent.prototype);
Subevent.prototype={
??
??constructor:Subevent,
??//添加事件
??addEvent:function(){
????if(this.ele.addEventListener){?//DOM2級
????
?????this.ele.addEventListener(type,func,false);
????}else{?//ele.atachEvent?IE
???? alert(2);
??????this.ele.atachEvent('on'+type,func);
????}
??},
??//刪除事件
??removeEvent:function(){
????if(this.ele.removeEventListener){?//DOM2級
??????this.ele.removEventListener(type,func,false);
????}else{?//ele.detachEvent?IE
??????this.ele.detachEvent('on'+type,func);
????}???
??}
???
};
/*********************/
var?btn=document.getElementById('btn');
function?showMes(){
??alert('執(zhí)行了一個點(diǎn)擊事件!');
}
var?demo=new?Subevent(btn,'click',showMes);
demo.addEvent();
Javascript中關(guān)于原型繼承的問題
天然
2016-01-07 16:44:36