JavaScript extend方法的最后修改superClass.prototype.constructor

发布于 2022-09-01 06:22:57 字数 596 浏览 11 评论 0

该问题困扰我好久了。
原书《JavaScript设计模式》,ISBN: 9787115191281。代码在42页下方。
书中写的extend函数如下:

jsfunction extend(subClass, superClass) {
  var F = function() {};
  F.prototype = superClass.prototype;
  subClass.prototype = new F();
  subClass.prototype.constructor = subClass;

  subClass.superclass = superClass.prototype;
  if(superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
  }
}

问题是最后3行这个if语句有什么用呢?书上说,即使父类是Object也可以正常继承,要怎么理解呢?整个extend函数中未对父类的prototype做改动,那么不加这个判断和修改会有什么错误么?

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

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

发布评论

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

评论(3

凉栀 2022-09-08 06:22:57

是补全完整的原型链吧,或者理解为一种修复,主要是担心superClass是从别的地儿继承过来又忘记指定constructor了,个人理解

乖乖 2022-09-08 06:22:57

补充楼上的:extend函数传入了两个参数,subClass和superClass,下面简称sub和super。

上面的前三行完成了sup和super的继承关系,第四行明确了构造器的指向。

但是跳出这个extend函数来看,之前传入的super完全也可以作为其他函数对象的sub!

所以,在extend函数中,需要最后确认super的构造器指向是否正确,如果不正确,需要自己来更正。

坐在坟头思考人生 2022-09-08 06:22:57

题主 您好 最近在找这本书发现网上已经绝版了 不知道楼主有什么途径买吗 电子版也行

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