黑马程序员技术交流社区
标题: 【上海校区】js最理想的继承——寄生组合式继承 [打印本页]
作者: 梦缠绕的时候 时间: 2018-8-8 09:41
标题: 【上海校区】js最理想的继承——寄生组合式继承
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());
作者: 不二晨 时间: 2018-8-16 17:20
奈斯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |