国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

web前端tips:js繼承——借用構(gòu)造函數(shù)繼承

2023-07-26 15:51 作者:上課我們聊QQ  | 我要投稿


上篇文章給大家分享了 js繼承中的原型鏈繼承

web前端tips:js繼承——原型鏈繼承

在文章末尾,我提到了

原型鏈的繼承,子類需要傳遞參數(shù)給父類的構(gòu)造函數(shù),就無法通過直接調(diào)用父類的構(gòu)造函數(shù)來實(shí)現(xiàn),需要通過中間的過程來傳遞參數(shù)

那這篇文章,也就能解決這個(gè)傳參問題了。

借用構(gòu)造函數(shù)繼承

又叫經(jīng)典繼承,它通過在子類構(gòu)造函數(shù)中調(diào)用父類構(gòu)造函數(shù)來繼承父類的屬性和方法。

借用構(gòu)造函數(shù)繼承的核心思想是,在子類構(gòu)造函數(shù)中使用?call()?或?apply()?方法調(diào)用父類構(gòu)造函數(shù),并將子類實(shí)例作為參數(shù)傳遞給父類構(gòu)造函數(shù)。這樣就能夠在子類實(shí)例中創(chuàng)建父類的屬性,并且每個(gè)子類實(shí)例都有它們自己的屬性副本。

以下是借用構(gòu)造函數(shù)繼承的基本步驟:

  1. 定義父類構(gòu)造函數(shù),設(shè)置父類的屬性和方法。

  2. 定義子類構(gòu)造函數(shù),使用?Parent.call(this, ...)?在子類中調(diào)用父類構(gòu)造函數(shù),并傳遞子類特有的參數(shù)。

  3. 在子類構(gòu)造函數(shù)中定義子類的屬性和方法。

//?1
function?Parent(name)?{
??this.name?=?name??
??this.arr?=?[1,2,3]
}

//?2
function?Child(name,?age)?{
??//?借用父類構(gòu)造函數(shù)
??Parent.call(this,?name)
??this.age?=?age
}

//?實(shí)例化
var?child?=?new?Child('我是?child',?666)
child.name?//?我是?child
child.arr?//?[1,2,3]
child.age?//?666


通過以上步驟,我們就實(shí)現(xiàn)了簡(jiǎn)單的借用構(gòu)造函數(shù)繼承,也解決了原型鏈繼承傳參問題。

并且由于每個(gè)子類實(shí)例都有它們自己的屬性副本,所以對(duì)屬性修改是不會(huì)互相影響的:

var?child1?=?new?Child('我是?child1',?111)
var?child2?=?new?Child('我是?child2',?222)
child1.arr.push(4)
child1.arr?//?[1,2,3,4]
child2.arr?//?[1,2,3]

優(yōu)點(diǎn)

  • 子類實(shí)例具有獨(dú)立的屬性,不會(huì)共享父類實(shí)例的屬性。

  • 子類可以向父類構(gòu)造函數(shù)傳遞參數(shù)。

缺點(diǎn)

  • 無法繼承父類原型鏈上的方法和屬性,只能繼承父類構(gòu)造函數(shù)中的屬性和方法。

function?Parent(name)?{
??this.arr?=?[1,2,3]
}
Parent.prototype.getArr?=?function()?{
??return?this.arr
}
function?Child()?{
??//?借用父類構(gòu)造函數(shù)
??Parent.call(this)
}
//?實(shí)例化
var?child?=?new?Child()
child.getArr()?//?Uncaught?TypeError:?child.getArr?is?not?a?function

  • 父類的方法無法復(fù)用,每個(gè)子類實(shí)例都會(huì)創(chuàng)建一份方法的副本。

需要注意的是,借用構(gòu)造函數(shù)繼承只是繼承了父類構(gòu)造函數(shù)中的屬性和方法,并沒有真正實(shí)現(xiàn)完全的繼承。如果希望子類也能繼承父類的原型鏈上的方法和屬性,可以使用其他方式,如組合繼承、寄生組合繼承等。

結(jié)語(yǔ)

牽手 持續(xù)為你分享各類知識(shí)和軟件 ,歡迎訪問、關(guān)注、討論 并留下你的小心心?


web前端tips:js繼承——借用構(gòu)造函數(shù)繼承的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
鸡东县| 商都县| 绥化市| 新邵县| 公安县| 威海市| 遵化市| 惠东县| 南召县| 宝清县| 河西区| 公主岭市| 旅游| 乡城县| 苍南县| 北辰区| 长乐市| 利川市| 罗山县| 报价| 呼伦贝尔市| 博客| 额尔古纳市| 清丰县| 平乡县| 贵州省| 垫江县| 剑川县| 汝城县| 新营市| 凉山| 高雄市| 长宁区| 连平县| 呼玛县| 望奎县| 泰安市| 泗水县| 平果县| 武邑县| 连平县|