javascript的多根继承和多层继承
上篇文章贴出后又想了两个问题:
仔细一想,多层继承上篇文章的代码已经实现。多根继承则需要进一步完善extend方法。于是有了下面的代码,使用方法很简单。只要一句话可以轻松实现对多个父类的继承。下面是详细的示例源代码。欢迎交流,QQ:27234687 。读者可以自行修改后点【测试】按钮查看输出结果。 /** 多根继承方法, 参数可以支持多个父类参数 子类将按顺序继承所有父类的方法, 如果父类中有重复的方法则继承父类列表中在后面的类 父类的方法通过this.superClass.method()调用,可以调用所有父类方法 */ Object.prototype.extend = function(){ this.superClass={} for(var i=0;i<arguments.length;i++){ this.SuperClass=arguments[i]; this.SuperClass(); this.superClass.SuperClass=arguments[i]; this.superClass.SuperClass() } } //声明父类1:第一个方法show将得到继承,第二个方法将被覆盖 function SuperClass1(){ this.show=function(){ alert('Call SuperClass1.show()'); } this.override=function(){ alert('Call SuperClass1.override()'); } } //声明父类2:子类将继承speak方法 function SuperClass2(){ this.speak=function(){ alert('Call SuperClass2.speak()'); } } //声明子类:继承父类1和父类2,同时覆盖了父类1的方法override function SubClass(){ //调用继承方法继承父类的属性和方法 this.extend(SuperClass1,SuperClass2); this.override=function(){ alert("Call SubClass.override()。I will call my superClass's method SuperClass1.override()"); this.superClass.override(); } this.sing=function(){ alert('Call SubClass.sing()'); } } //子类的子类,多层继承展示:将通过继承SubClass得到SuperClass1和SuperClass2的方法以及SubClass的方法 function SubSubClass(){ this.extend(SubClass); this.talk=function(){ alert('call SubSubClass.talk()'); } } //测试子类的继承的结果: var s=new SubClass(); s.show(); //将调用SuperClass1的方法 s.speak(); //将调用SuperClass2的方法 s.override();//将调用SubClass的方法 s.sing();//将调用SubClass的sing方法 //测试孙类继承的结果: var s=new SubSubClass(); s.show(); //将调用SuperClass1的方法 s.speak(); //将调用SuperClass2的方法 s.override();//将调用SubClass的方法 s.sing();//将调用SubClass的sing方法 s.talk();//将调用SubSubClass.talk方法 测试