关于寄生组合式继承的一个小疑问??

书上有这么个例子来说明寄生组合式继承原理:
function SuperType(name){//新建一个超类型构造函数
    this.name=name;
    }
SuperType.prototype.sayName=function(){return this.name;}

function SubType(name,age){
    SuperType.call(this,name);//借用构造函数继承超类型的属性
    this.age=age;
    }
function F(){};
F.prototype=SuperType.prototype;
SubType.prototype=new F()//借用原型链继承超类型方法
SubType.constructor=SubType;
x1=new SubType("cc",11);
alert(x1.sayName())//cc

问题是:
SubType.prototype=new F()//不懂为什么要这么绕??
直接SubType.prototype=SuperType.prototype//这样不也可以继承超类型的方法吗??
或者只绕半圈SubType.prototype=(new SuperType()).__proto__//这样不可以继承超类型上原型的的方法吗??

阅读 2.2k
3 个回答

第一个问题,直接SubType.prototype=SuperType.prototype这样不叫继承,这叫赋值;赋值的话,如果你在子类加方法,也会影响到父类。
第二个问题我实在无法吐槽…

改成你这样的话,子类原型添加方法,父类也有了。。。这样根本不是继承了吧

推荐问题