亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

面向?qū)ο蟮腏avaScript之繼承(一) 類式繼承

forsigner / 909人閱讀

摘要:那你們肯定會(huì)問(wèn)為什么共用,而沒(méi)有共用呢,下面就給你解釋,請(qǐng)看引用類型是共用的值類型是私用的。

引言

面向?qū)ο蟮木幊陶Z(yǔ)言都具繼承這一機(jī)制,而 JavaScript 是基于原型(Prototype)面向?qū)ο蟪绦蛟O(shè)計(jì),所以它的實(shí)現(xiàn)方式也是基于原型(Prototype)實(shí)現(xiàn)的.

繼承的方式

類式繼承

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

組合繼承

原型式繼承

寄生式繼承

寄生組合式繼承

1.類式繼承
//聲明父類
function SuperClass(){
    //值類型
    this.superValue = true;
    //引用類型
    this.book = ["c","java","htnl"]
}

//為父類添加方法
SuperClass.prototype.getSuperValue =function(){
    return this.superValue;
}

//聲明子類
function SubClass(){
    this.subValue = false;
}
//繼承父類
SubClass.prototype = new SuperClass();

//為子類添加方法
SubClass.prototype.getSubValue = function(){
    return this.subValue;
}

//測(cè)試
var a = new SubClass(); 
var b = new SubClass(); 
console.log(a.getSubValue()); //false
console.log(a.getSuperValue());  //true

console.log(a.book);//["c", "java", "htnl"]
console.log(b.book);//["c", "java", "htnl"]
a.book.push("css");
console.log(a.book);//["c", "java", "htnl", "css"]
console.log(b.book);//["c", "java", "htnl", "css"]

console.log(a.getSuperValue())//true
console.log(b.getSuperValue())//true
a.superValue = "a";

console.log(a.getSuperValue())//a
console.log(b.getSuperValue())//true

console.log(a.getSubValue())//false
console.log(b.getSubValue())//false
a.subValue = "sub";

console.log(a.getSubValue())//sub
console.log(b.getSubValue())//false

通過(guò)測(cè)試可以得知類式繼承有如下特點(diǎn):

通過(guò)子類原型繼承父類的實(shí)例 實(shí)現(xiàn)繼承.

子類實(shí)例的原型都是父類實(shí)例,所以 a b 都是用的是 父類的實(shí)例.所以它的屬性共用(值類型,引用類型)。那你們肯定會(huì)問(wèn):為什么book 共用,而 subValue 沒(méi)有共用呢,下面就給你解釋,請(qǐng)看2

引用類型是共用的,值類型是私用的。

其實(shí):值類型按理說(shuō)應(yīng)該和值類型一樣,都是共用的,但是因?yàn)?this 的原因,this.superValue尋值時(shí)由近到遠(yuǎn),先尋找 a,若 a 沒(méi)有則尋找 a 的原型`prototype`,一直往上,若沒(méi)有則返回`"undefined"`,這樣你就知道為什么給a.book.push("css"); 之后 b.book 也發(fā)生了改變,因?yàn)樗菍ふ业皆蜕系?book 值,而a.superValue = "a"; 則直接給 a 添加了個(gè) superValue 屬性,而沒(méi)有去 原型`prototype`的superValue賦值,則輸出的時(shí)候也是就近.

下一節(jié)講解 面向?qū)ο蟮腏avaScript之繼承(二) 構(gòu)造函數(shù)繼承

參考

個(gè)人博客

JavaScript 設(shè)計(jì)模式 --- 張容銘 著

本人對(duì)類式繼承的一點(diǎn)點(diǎn)理解,若是那里解釋的有問(wèn)題,請(qǐng)多指教,謝謝!

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81570.html

相關(guān)文章

  • 面向對(duì)象 JavaScript

    摘要:是完全的面向?qū)ο笳Z(yǔ)言,它們通過(guò)類的形式組織函數(shù)和變量,使之不能脫離對(duì)象存在。而在基于原型的面向?qū)ο蠓绞街?,?duì)象則是依靠構(gòu)造器利用原型構(gòu)造出來(lái)的。 JavaScript 函數(shù)式腳本語(yǔ)言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長(zhǎng)期以來(lái)人們對(duì)這一門語(yǔ)言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z(yǔ)言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽猓瑥膶?duì)語(yǔ)言感悟的角度闡述為什...

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

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

    YorkChen 評(píng)論0 收藏0
  • JS對(duì)象(1)重新認(rèn)識(shí)面向對(duì)象

    摘要:對(duì)象重新認(rèn)識(shí)面向?qū)ο竺嫦驅(qū)ο髲脑O(shè)計(jì)模式上看,對(duì)象是計(jì)算機(jī)抽象現(xiàn)實(shí)世界的一種方式。除了字面式聲明方式之外,允許通過(guò)構(gòu)造器創(chuàng)建對(duì)象。每個(gè)構(gòu)造器實(shí)際上是一個(gè)函數(shù)對(duì)象該函數(shù)對(duì)象含有一個(gè)屬性用于實(shí)現(xiàn)基于原型的繼承和共享屬性。 title: JS對(duì)象(1)重新認(rèn)識(shí)面向?qū)ο? date: 2016-10-05 tags: JavaScript 0x00 面向?qū)ο?從設(shè)計(jì)模式上看,對(duì)象是...

    superw 評(píng)論0 收藏0
  • JavaScript面向對(duì)象編程-繼承(三)

    摘要:子類不是父類實(shí)例的問(wèn)題是由類式繼承引起的。所以寄生式繼承和構(gòu)造函數(shù)繼承的組合又稱為一種新的繼承方式。但是這里的寄生式繼承處理的不是對(duì)象,而是類的原型??瓷先ヂ晕?fù)雜,還得好好研究。 寄生組合式繼承(終極繼承者) 前面學(xué)習(xí)了類式繼承和構(gòu)造函數(shù)繼承組合使用,也就是組合繼承,但是這種繼承方式有個(gè)問(wèn)題,就是子類不是父類的實(shí)例,而子類的原型是父類的實(shí)例。子類不是父類實(shí)例的問(wèn)題是由類式繼承引起的。...

    alaege 評(píng)論0 收藏0
  • Javascript 設(shè)計(jì)模式讀書筆記(三)——繼承

    摘要:的繼承方式屬于原型式繼承,非常靈活。當(dāng)使用關(guān)鍵字執(zhí)行類的構(gòu)造函數(shù)時(shí),系統(tǒng)首先創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象會(huì)繼承自構(gòu)造函數(shù)的原型對(duì)象新對(duì)象的原型就是構(gòu)造函數(shù)的屬性。也就是說(shuō),構(gòu)造函數(shù)用來(lái)對(duì)生成的新對(duì)象進(jìn)行一些處理,使這個(gè)新對(duì)象具有某些特定的屬性。 繼承這個(gè)東西在Javascript中尤其復(fù)雜,我掌握得也不好,找工作面試的時(shí)候在這個(gè)問(wèn)題上栽過(guò)跟頭。Javascript的繼承方式屬于原型式繼承,...

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

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

0條評(píng)論

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