JS 寄生组合继承 《JS高级程序设计 第3版》P173页是否可以表述得更好 财富值87

2016-11-06 03:37发布

从零学JS一周,看到《JS高级程序设计 第3版》中文版第173页关于寄生组合继承的地方,书中代码为:

 function object(o){    function F(){}    F.prototype = o;    return new F();  }  function inheritPrototype(subType,superType) {   var prototype=object(superType.prototype);//使prototype的[prototype]指向superType.prototype   prototype.constuctor=subType;   subType.property=prototype; } function SuperType(name) {   this.name=name;   this.Colors = ["red","blue","green"]; } SuperType.prototype.sayName=function (){   alert(this.name); }; function SubType(name, age){   SuperType.call(this,name);   this.age = age; } inheritPrototype(SubType,SuperType);  SubType.prototype.sayAge=function (){   alert(this.age); }  然后给出插图:


我的理解:
inheritPrototype(SubType,SuperType);这一行代码使得SubType.prototype的[prototype]指向了SuperType.prototype,但SubType.prototype本身不是 SuperType的实例,不具备name,colors等属性。
插图这里调用了SubType.prototype=new SuperType();是否有点多此一举。本来寄生组合继承就是要实现SubType.prototype只继承SuperTYpe.prototype。这样一弄,相当于又回到组合继承上去了。
我觉得书中这里可以表述得更好,比如把SubType.prototype=new SuperType();删去,画一个SubType.prototype没有继承SuperType实例属性的图。不知道这样是不是正确的

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答

你说的对,仔细看书172页,这插图本来就是说的组合继承,并不是寄生组合式继承。

一周热门 更多>