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

发布于 2022-09-04 02:39:05 字数 1232 浏览 20 评论 0

从零学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实例属性的图。不知道这样是不是正确的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

掐死时间 2022-09-11 02:39:05

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文