书上有这么个例子来说明寄生组合式继承原理:
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__//这样不可以继承超类型上原型的的方法吗??
第一个问题,直接
SubType.prototype=SuperType.prototype
这样不叫继承,这叫赋值;赋值的话,如果你在子类加方法,也会影响到父类。第二个问题我实在无法吐槽…