为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2019-04-08 09:21:44
该问题困扰我好久了。原书《JavaScript设计模式》,ISBN:9787115191281。代码在42页下方。书中写的extend函数如下:jsfunctionextend(subClass,superClass){varF=function(){};F.prototype=superClass.prototype;subClass.prototype=newF();subClass.prototype.constructor=subClass;subClass.superclass=superClass.prototype;if(superClass.prototype.constructor==Object.prototype.constructor){superClass.prototype.constructor=superClass;}}问题是最后3行这个if语句有什么用呢?书上说,即使父类是Object也可以正常继承,要怎么理解呢?整个extend函数中未对父类的prototype做改动,那么不加这个判断和修改会有什么错误么?
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

是补全完整的原型链吧,或者理解为一种修复,主要是担心superClass是从别的地儿继承过来又忘记指定constructor了,个人理解
                            
查看完整回答
反对 回复 2019-04-08
?
噜噜哒

TA贡献1784条经验 获得超7个赞

补充楼上的:extend函数传入了两个参数,subClass和superClass,下面简称sub和super。
上面的前三行完成了sup和super的继承关系,第四行明确了构造器的指向。
但是跳出这个extend函数来看,之前传入的super完全也可以作为其他函数对象的sub!
所以,在extend函数中,需要最后确认super的构造器指向是否正确,如果不正确,需要自己来更正。
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信