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

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

o1.constructor = subType的作用何在?

o1.constructor = subType的作用何在?

慕少森 2019-03-11 20:36:06
在了解js的寄生組合繼承時看到了這篇博客 https://www.cnblogs.com/nullc...,對其中的一個地方不太理解。在這里粘貼一下求問:寄生組合式繼承:通過借用構造函數來繼承屬性,通過原型鏈的混成形式來繼承方法.思路:不必為了指定子類的原型而調用父類的構造函數,我們所需要的無非就是父類原型的一個副本而已.本質上,就是使用寄生式繼承來繼承父類的原型,然后在將結果指定給子類的原型:<script>function inheritPrototype(subType,superType){      var o1=Object.create(superType.prototype) ;        //創建父類原型的一個副本        o1.constructor = subType;                        //為副本添加constructor屬性,彌補重寫原型而失去的constructor屬性       subType.prototype=o1;                     //將創建的對象(副本)賦值給子類的原型}Object.create =  function(o){    var F = function (){};     F.prototype = o;    return new F(); };</script>問題:o1.constructor = subType的作用何在?o1本質上是Object.create里的一個空的構造函數實例化出來的一個對象,所以o1是沒有任何屬性的,包括constructor屬性,這一點理解,但是不理解為什么要使o1的constructor指向subType?如果說是修正constructor的指向的話,為什么不先寫subType.prototype=o1再寫o1.constructor = subType呢?
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

可以先寫subType.prototype=o1再寫o1.constructor = subType;

這兩條語句沒有沖突,可以互換位置。


查看完整回答
反對 回復 2019-03-11
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

o1.constructor = subType的作用何在?這個是為了校正subType的constructor。因為subType.prototype=o1代碼重寫了subType的原型對象,這是的原型已經與最初的subType原型對象失去聯系。

記住,在完全重寫一個對象的原型對象時,最好重新指定constructor。不然子類的constructor屬性就指向了超類,而不是子類。


查看完整回答
反對 回復 2019-03-11
  • 2 回答
  • 0 關注
  • 561 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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