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

有大佬遇到过这个问题吗:b.prototype=a.prototype 为什么不能直接这样赋值,而需要使用另外一个函数转一下求解答!

有大佬遇到过这个问题吗:b.prototype=a.prototype 为什么不能直接这样赋值,而需要使用另外一个函数转一下求解答!

慕标5832272 2019-08-13 23:36:45
functionPerson(){}Person.prototype.run=function(){console.log('run')}functionAnimale(){}Animale.prototype=Person.prototype//为什么不推荐这样直接改变某个函数的原型Animale.prototype.eat=function(){console.log('eat')}console.log(newAnimale().run())Animale.prototype=Person.prototype这一句正确的写法应该是vartempFunc=function(){}tempFunc.prototype=Person.prototypeAnimale.prototype=newtempFunc()为什么需要这个tempFunc,直接Animale.prototype=Person.prototype这样赋值为什么是有问题的?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

Animale.prototype=Person.prototype这样写没问题,Animale的原型和Person原型指向同一个对象。但如果你要实现继承,希望Animale是子类,Person是父类。那么你在Animale.prototype里修改的任何方法,实际上还是改变了Person.prototype。Animale的原型对象(子类)无法独自扩展,违背了继承的思想
vartempFunc=function(){}
tempFunc.prototype=Person.prototype
Animale.prototype=newtempFunc()
此时Animale.prototype为tempFunc的一个实例对象,而tempFunc的原型对象为Person.prototype,这样修改子类Animale.prototype不会影响父类Person.prototype,也就是形成了一条原型链。
                            
查看完整回答
反对 回复 2019-08-13
  • 2 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

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