国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript面向?qū)ο缶幊?繼承(三)

alaege / 3044人閱讀

摘要:子類(lèi)不是父類(lèi)實(shí)例的問(wèn)題是由類(lèi)式繼承引起的。所以寄生式繼承和構(gòu)造函數(shù)繼承的組合又稱(chēng)為一種新的繼承方式。但是這里的寄生式繼承處理的不是對(duì)象,而是類(lèi)的原型。看上去略微復(fù)雜,還得好好研究。

寄生組合式繼承(終極繼承者)

前面學(xué)習(xí)了類(lèi)式繼承和構(gòu)造函數(shù)繼承組合使用,也就是組合繼承,但是這種繼承方式有個(gè)問(wèn)題,就是子類(lèi)不是父類(lèi)的實(shí)例,而子類(lèi)的原型是父類(lèi)的實(shí)例。子類(lèi)不是父類(lèi)實(shí)例的問(wèn)題是由類(lèi)式繼承引起的。因此還有一種更好的繼承方式,那就是寄生組合式繼承,也就是寄生式繼承和構(gòu)造函數(shù)繼承的組合,因?yàn)榧纳嚼^承依托于原型繼承,原型繼承又與類(lèi)式繼承相像。所以寄生式繼承和構(gòu)造函數(shù)繼承的組合又稱(chēng)為一種新的繼承方式。但是這里的寄生式繼承處理的不是對(duì)象,而是類(lèi)的原型。

/**
 *寄生式繼承 繼承原型
 * 傳遞參數(shù) subClass子類(lèi)
 * 傳遞參數(shù) superClass 父類(lèi)
 */
function inheritPrototype(subClass,superClass) {
    //復(fù)制一份父類(lèi)的原型副本保存在變量中
    var p = inheritObject(superClass.prototype);
    //修正因?yàn)橹貙?xiě)子類(lèi)原型副本保存在變量中
    p.constructor = subClass;
    //設(shè)置子類(lèi)的原型
    subClass.prototype = p;
}
//測(cè)試代碼
//定義父類(lèi)
function SuperClass(name) {
    this.name = name;
    this.colors =["red","blue","green"];
}
//定義父類(lèi)原型方法
SuperClass.prototype.getName = function () {
    console.log(this.name);
};
//定義子類(lèi)
function SubClass(name,time) {
    //構(gòu)造函數(shù)式繼承
    SuperClass.call(this,name);
    //子類(lèi)新增屬性
    this.time = time;
}
//寄生式繼承父類(lèi)原型
inheritPrototype(SubClass,SuperClass);
//子類(lèi)新增原型方法
SubClass.prototype.getTime = function () {
    console.log(this.time);
};
//創(chuàng)建兩個(gè)測(cè)試方法
var instance1 = new SubClass("js",2018);
var instance2 = new SubClass("css",8102);
instance1.colors.push("black");
console.log(instance1.colors);//[ "red", "blue", "green", "black" ]
console.log(instance2.colors);//[ "red", "blue", "green" ]
instance2.getName();//css
instance2.getTime();//8102

寄生組合式繼承主要是通過(guò)寄生式繼承重新繼承父類(lèi)的原型,需要繼承的僅僅是父類(lèi)的原型,而不需要再調(diào)用父類(lèi)的構(gòu)造函數(shù),也就是說(shuō)在構(gòu)造函數(shù)繼承中我們已經(jīng)調(diào)用了父類(lèi)的構(gòu)造函數(shù),因此我們需要的就是父類(lèi)的原型對(duì)象的一個(gè)副本,而這個(gè)副本通過(guò)原型繼承即可得到,但是直接賦值給子類(lèi)會(huì)有問(wèn)題,因?yàn)閷?duì)父類(lèi)原型對(duì)象復(fù)制得到的復(fù)制對(duì)象p中的constructor指向的不是subClass子類(lèi)對(duì)象,因此在寄生式繼承中要對(duì)復(fù)制對(duì)象p做一次增強(qiáng),修復(fù)其constructor屬性指向不正確的問(wèn)題,最后將得到的復(fù)制對(duì)象p賦值給子類(lèi)的原型,這樣子類(lèi)的原型就繼承了父類(lèi)的原型并且沒(méi)有執(zhí)行父類(lèi)的構(gòu)造函數(shù)。
看上去略微復(fù)雜,還得好好研究。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97923.html

相關(guān)文章

  • Javascript面向對(duì)象編程):非構(gòu)造函數(shù)的繼承

    摘要:原文鏈接一什么是非構(gòu)造函數(shù)的繼承比如,現(xiàn)在有一個(gè)對(duì)象,叫做中國(guó)人。通過(guò)函數(shù),繼承了。中國(guó)北京上海香港廈門(mén)北京上海香港廈門(mén)北京上海香港這時(shí),父對(duì)象就不會(huì)受到影響了。目前,庫(kù)使用的就是這種繼承方法。 原文鏈接 一、什么是非構(gòu)造函數(shù)的繼承? 比如,現(xiàn)在有一個(gè)對(duì)象,叫做中國(guó)人。 var Chinese = { nation: 中國(guó) } 還有一個(gè)對(duì)象,叫做醫(yī)生。 var Doctor = {...

    jaysun 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評(píng)論0 收藏0
  • javaScript面向對(duì)象編程-繼承(一)

    摘要:組合繼承前面兩種模式的特點(diǎn)類(lèi)式繼承通過(guò)子類(lèi)的原型對(duì)父類(lèi)實(shí)例化實(shí)現(xiàn)的,構(gòu)造函數(shù)式繼承是通過(guò)在子類(lèi)的構(gòu)造函數(shù)作用環(huán)境中執(zhí)行一次父類(lèi)的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的。 類(lèi)有三部分 構(gòu)造函數(shù)內(nèi)的,供實(shí)例化對(duì)象復(fù)制用的 構(gòu)造函數(shù)外的,直接通過(guò)點(diǎn)語(yǔ)法添加的,供類(lèi)使用,實(shí)例化對(duì)象訪問(wèn)不到 類(lèi)的原型中的,實(shí)例化對(duì)象可以通過(guò)其原型鏈間接地訪問(wèn)到,也是供所有實(shí)例化對(duì)象所共用的。 類(lèi)式繼承 類(lèi)的原型對(duì)象的作用就是為類(lèi)...

    YorkChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<