A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.传统的组合式继承的缺点。





  • function SuperType(name,colors){



  •    this.name=name;



  •    this.colors=colors;



  • }



  • SuperType.prototype.getSuperProperty=function(){



  •     return this.name;



  • }







  • function SubType(job,name,colors){



  •      SuperType.call(this,name,colors);  //第二次调用基类的构造函数



  •      this.job=job;  



  • }







  • SubType.prototype=new SuperType();    //第一次调用基类的构造函数







  • SubType.prototype.getSubProperty=function(){



  • return this.job;



  • }



  • var instance=new SubType("doctor","John",["red","green"]);







  • console.log(instance.getSuperProperty());  //john





传统的组合式继承,为了使子类拥有自己的实例属性,在子类的构造函数里调用了基类的构造函数,用于覆盖原型链继承的共享属性。所以,组合式继承会两次调用基类的构造函数:第一次,子类的原型声明为基类的一个实例;第二次,子类的构造函数中调用基类的构造函数。

2.寄生组合式继承



  • <pre name="code" class="javascript">function SuperType(name,colors){



  •   this.name=name;



  •   this.colors=colors;



  • }



  • SuperType.prototype.getSuperProperty=function(){



  •     return this.name;



  • }



  • function SubType(job,name,colors){



  •     SuperType.call(this,name,colors);



  •      this.job=job;  



  • }











  • function inherit(subType,superType){



  •     var prototype=Object.create(superType.prototype);  







  •     prototype.constructor=subType;







  •     subType.prototype=prototype;



  • }







  • inherit(subType,superType);







  • SubType.prototype.getSubPrototype=function(){



  • return this.job;



  • }



  • var instance=new SubType("doctor","John",["red","green"]);



  • console.log(instance.getSuperPrototype());




1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马