亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

b.prototype=a.prototype 為什么不能直接這樣賦值,而需要使用另外一個函數轉一下

b.prototype=a.prototype 為什么不能直接這樣賦值,而需要使用另外一個函數轉一下

函數式編程 2019-04-27 17:17:01
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貢獻1804條經驗 獲得超7個贊

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-04-27
  • 2 回答
  • 0 關注
  • 350 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號