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

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.prototype
Animale.prototype=newtempFunc()
为什么需要这个tempFunc,直接Animale.prototype=Person.prototype这样赋值为什么是有问题的?
慕标5832272
浏览 278回答 2
2回答

茅侃侃

Animale.prototype=Person.prototype这样写没问题,Animale的原型和Person原型指向同一个对象。但如果你要实现继承,希望Animale是子类,Person是父类。那么你在Animale.prototype里修改的任何方法,实际上还是改变了Person.prototype。Animale的原型对象(子类)无法独自扩展,违背了继承的思想vartempFunc=function(){}tempFunc.prototype=Person.prototypeAnimale.prototype=newtempFunc()此时Animale.prototype为tempFunc的一个实例对象,而tempFunc的原型对象为Person.prototype,这样修改子类Animale.prototype不会影响父类Person.prototype,也就是形成了一条原型链。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript