成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javaScript原型及原型鏈詳解(二)

widuu / 1962人閱讀

摘要:當(dāng)然這還沒完,因?yàn)槲覀冞€有重要的一步?jīng)]完成,沒錯(cuò)就是上面的第行代碼,如果沒有這行代碼實(shí)例中的指針是指向構(gòu)造函數(shù)的,這樣顯然是不對的,因?yàn)檎G闆r下應(yīng)該指向它的構(gòu)造函數(shù),因此我們需要手動更改使重新指向?qū)ο蟆?/p>

第一節(jié)內(nèi)容:javaScript原型及原型鏈詳解(二)

第一節(jié)中我們介紹了javascript中的原型和原型鏈,這一節(jié)我們來講利用原型和原型鏈我們可以做些什么。

普通對象的繼承
  var a = {
    x: 10,
    caculate: function(z) {
      console.log(this.x + this.y + z)
    }
  };

  var b = {
    y: 20,
    __proto__: a
  };

  var c = {
    y: 30,
    __proto__: a
  };

  b.caculate(30)    // 60
  c.caculate(40)    // 80

這樣我們就通過的原型鏈實(shí)現(xiàn)了普通對象的繼承,下面我們還是通過一張?jiān)蛨D來講解一下繼承的過程。

上面代碼中我們創(chuàng)建了三個(gè)普通對象a、b、c,其中a有一個(gè)x屬性,和caculate方法;b和c都有一個(gè)y屬性,同時(shí)讓b和c的默認(rèn)屬性__proto__屬性指向a對象,如圖所示。
這是時(shí)候我們調(diào)用了b.caculate(30), c.caculate(40),顯然b和c的自身方法中是沒有caculate方法的,那么這個(gè)時(shí)候就會沿著b的原型鏈向上查找,然后找到了a中有caculate方法,則返回caculate方法,
如果a中也沒有這個(gè)方法,那么會沿著原型鏈繼續(xù)向上查找,找到則返回,找不到則返回undefined

函數(shù)對象的繼承

比如我們有一個(gè)名為"Animal"的構(gòu)造函數(shù),還有一個(gè)叫做"Cat"的構(gòu)造函數(shù):

function Animal() {};
Animal.prototype.species = "動物";

function Cat(name, color) {
    this.name = name;
    this.color = color;
}

其中Animal對象中有一個(gè)原型屬性species = "動物",Cat對象有兩個(gè)自身對象name和color,這個(gè)時(shí)候我們?nèi)绻枰孋at對象擁有Animal對象中的屬性應(yīng)該怎么辦呢? 很簡單我們只需要讓Cat繼承Animal對象就行了,下面我們看如何讓Cat繼承Animal:

1    Cat.prototype= new Animal();
2    Cat.prototype.constructor = Cat;

3    var cat1 = new Cat("大白", "白色")
4    console.log(cat1.species)    // 動物

上面的方法是通過直接繼承prototype的方法實(shí)現(xiàn)的繼承,如上圖所示:我們一開始創(chuàng)建Cat對象時(shí),Cat.prototype默認(rèn)指向Cat的原型(如步驟1所示)。 然后我們更改Cat的原型鏈,讓Cat.prototype指向Animal 的實(shí)例(實(shí)例中具有構(gòu)造函數(shù)的所有屬性和方法),如步驟2所示,這樣就成功更改了Cat的原型鏈,當(dāng)我們調(diào)用Cat.species屬性時(shí),沿著原型鏈就查找到Animal實(shí)例中的species屬性了,這樣就實(shí)現(xiàn)了函數(shù)對象的繼承。
當(dāng)然這還沒完,因?yàn)槲覀冞€有重要的一步?jīng)]完成,沒錯(cuò)!就是上面的第2行代碼,如果沒有這行代碼Animal實(shí)例中的constructor指針是指向Animal構(gòu)造函數(shù)的,這樣顯然是不對的,因?yàn)閏onstructor正常情況下應(yīng)該指向它的構(gòu)造函數(shù),因此我們需要手動更改:Cat.prototype.constructor = Cat; 使constructor重新指向Cat對象。

我們這里講的繼承的方法只是常見的一種,另外還有多種方法實(shí)現(xiàn)繼承,這里推薦阮一峰的一篇文章:構(gòu)造函數(shù)的繼承,里面講了常見的實(shí)現(xiàn)繼承的方法。這篇文章也是參考了里面的方法。

如果看了這兩篇文章,你還是沒搞清楚原型和原型鏈,給你推薦我學(xué)習(xí)的時(shí)候看的幾篇文章,反復(fù)的看反復(fù)的閱讀,總會弄明白的,畢竟我是花了三天時(shí)間才搞懂了。
最詳盡的 JS 原型與原型鏈終極詳解
深入理解JavaScript系列(10):JavaScript核心(晉級高手必讀篇)
前端開發(fā)必須知道的JS(一) 原型和繼承

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83051.html

相關(guān)文章

  • javaScript原型原型詳解(一)

    摘要:執(zhí)行行代碼,我們可以看到控制臺打印出來的結(jié)果如下結(jié)果印證了我們上面講的內(nèi)容指向的構(gòu)造函數(shù)指向的原型對象原型對象中指向構(gòu)造函數(shù)。 在javascript中原型和原型鏈機(jī)制是最難懂的部分(沒有之一),同時(shí)也是最重要的部分,在學(xué)習(xí)的過程中你可能認(rèn)認(rèn)真真的看了一遍但還是完全不懂書上說的什么,的確是這樣的,我在學(xué)習(xí)的時(shí)候可是反復(fù)看了4、5遍才初步理解了。 下面我把我的理解總結(jié)了一下希望對你們有...

    springDevBird 評論0 收藏0
  • javascript中new關(guān)鍵字詳解

    摘要:本文給大家詳細(xì)介紹了下中關(guān)鍵字的使用方法,以及使用關(guān)鍵字的區(qū)別,有需要的小伙伴可以參考下。第行通過關(guān)鍵字創(chuàng)建了一個(gè)新對象行對象嘗試訪問和屬性,并調(diào)用方法。一般情況下,函數(shù)對象在產(chǎn)生時(shí)會內(nèi)置屬性并將函數(shù)名作為賦值僅函數(shù)對象。 本文給大家詳細(xì)介紹了下javascript中new關(guān)鍵字的使用方法,以及javascript 使用new關(guān)鍵字的區(qū)別,有需要的小伙伴可以參考下。 function ...

    alaege 評論0 收藏0
  • 【前端基礎(chǔ)進(jìn)階】JS原型原型、對象詳解

    摘要:二構(gòu)造函數(shù)我們先復(fù)習(xí)一下構(gòu)造函數(shù)的知識上面的例子中和都是的實(shí)例。這兩個(gè)實(shí)例都有一個(gè)構(gòu)造函數(shù)屬性,該屬性是一個(gè)指針指向。原型鏈其中是對象的實(shí)例。 一. 普通對象與函數(shù)對象 JavaScript 中,萬物皆對象!但對象也是有區(qū)別的。分為普通對象和函數(shù)對象,Object 、Function 是 JS 自帶的函數(shù)對象。下面舉例說明 var o1 = {}; var o2 =new Objec...

    explorer_ddf 評論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評論0 收藏0
  • 【連載】前端個(gè)人文章整理-從基礎(chǔ)到入門

    摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<