本例只是以学习JS原型链为主,如果是对象封装或其他方法不在考虑。【想要实现】:父类调用 DOM0级事件处理程序,子类调用IE和DOM2级事件处理程序。实例化子类可以为元素节点添加事件和删除,如果不能满足则继续查找父类中的方法。【问题】 感觉是 this的问题。在线调试地址: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('执行了一个点击事件!');
}
var demo=new Subevent(btn,'click',showMes);
demo.addEvent();
1 回答
舞歌
TA贡献8条经验 获得超1个赞
Subevent.prototype=Object.create(Basevent.prototype);
Subevent.prototype={……}
这个,你把Subevent的原型赋值了一个新的对象,就不能去继承Basevent.prototype了,可以改为
Subevent.prototype={……}
Object.setPrototypeOf(Sbevent.prototype,Basevent.prototype)
这样就把原型对象加上了。
添加回答
举报
0/150
提交
取消