Javascript中关于原型继承的问题

本例只是以学习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();


天然
浏览 1332回答 1
1回答

舞歌

Subevent.prototype=Object.create(Basevent.prototype); Subevent.prototype={……} 这个,你把Subevent的原型赋值了一个新的对象,就不能去继承Basevent.prototype了,可以改为 Subevent.prototype={……} Object.setPrototypeOf(Sbevent.prototype,Basevent.prototype) 这样就把原型对象加上了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript