欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你深入了解JavaScript中的原型&原型鏈

 更新時間:2023年02月13日 09:03:37   作者:mick  
相信不少同學在面試的時候經(jīng)常在基礎(chǔ)上就掛掉了,當下行情實屬嚴峻,如果我們基礎(chǔ)都沒有打牢固的話,實屬有點面試浪費機會。本文就來和大家聊聊JavaScript中的原型&原型鏈,希望對大家有所幫助

原型 & 原型鏈

大家肯定都看過一些原型和原型鏈的總結(jié)的一個圖

相信不少同學看到這幅圖腦瓜子疼,有耐心的同學可能會從頭到尾捋一捋。而我們今天的起點并不是這幅圖,我們通過一些案例來一步步的實現(xiàn)這幅圖,這樣是不是就有點意思了啊

原型

prototype

function Person() {}

Person.prototype.name = "mick"

var person1 = new Person()
var person2 = new Person()

console.log(person1.name) // mick
console.log(person2.name) // mick

從案例中我們可以看到構(gòu)造函數(shù)Person有一個屬性是prototype。其實這個屬性指向了一個對象,這個對象正是調(diào)用構(gòu)造函數(shù)而創(chuàng)建的實例的原型,也就是person1person2的原型。

那么什么是原型呢?

原型可以理解為:每一個JavaScript對象(null除外)在創(chuàng)建的時候都會與之關(guān)聯(lián)另一個對象,這個被關(guān)聯(lián)的對象就是我們所說的原型,每一個對象都會從原型繼承屬性。所以我們可以來實現(xiàn)圖的第一步:

__proto__

function Person() {}

var person = new Person()
console.log(person.__proto__ === Person.prototype) // true

我們的實例personPerson.prototype有什么關(guān)系呢?從案例中我們就可以得到答案了。

每一個JavaScript對象(除了null)都具有一個屬性叫__proto__,這個屬性會指向該對象的原型

接著我們繼續(xù)考慮一個問題。既然實例對象和構(gòu)造函數(shù)都可以指向原型,那么原型是否有屬性指向構(gòu)造函數(shù)或者實例呢?

constructor

指向?qū)嵗牡故菦]有,因為一個構(gòu)造函數(shù)可以生成多個實例,但是原型指向構(gòu)造函數(shù)是有的,那就是constructor。每一個原型都有一個constructor屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)。

function Person() {}

console.log(Person === Person.prototype.constructor) // true

這里我們可以得到下面的總結(jié)

function Person() {
}

var person = new Person();
console.log(person.__proto__ == Person.prototype) // true
console.log(Person.prototype.constructor == Person) // true
console.log(Object.getPrototypeOf(person) === Person.prototype) // true

原型鏈

當我們讀取實例上的一個屬性的時候,如果找不到,就會查找與實例關(guān)聯(lián)的原型中的屬性,如果還是找不到,就去找原型的原型,一直找到最頂層為止。

function Person() {}

Person.prototype.name = "mick"

var person = new Person()
person.name = "randy"
console.log(person.name) // randy

delete person.name
console.log(person.name) // mick

首先我們我們給實例對象person添加屬性name,結(jié)果肯定是randy。但是當我們刪除了name屬性的時候,那么在person的實例上就找不到name屬性了,那就會從person實例的原型查找,也就是person.__proto__,也就是Person.prototype查找,找到了mick。

那如果Person.prototype也沒找到呢?

原型的原型

var obj = new Object()
obj.name = "mick"
console.log(obj.mick) // mick

原型對象就是通過Object構(gòu)造函數(shù)生成的,我們繼續(xù)依據(jù)上面的問題來說,實例的__proto__指向構(gòu)造函數(shù)的prototype

這個圖一出來是不是感覺我們快完成了呢?其實還差一丟丟。我們可以通過原型一層層的向上找,總要有個盡頭吧。

console.log(Object.prototype.__proto__ === null) // true

null代表了沒有對象,即此處不應(yīng)該有值。這下我們可以完整的畫圖了

到此這篇關(guān)于一文帶你深入了解JavaScript中的原型&原型鏈的文章就介紹到這了,更多相關(guān)JavaScript原型 原型鏈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生JS實現(xiàn)懸停下拉菜單

    原生JS實現(xiàn)懸停下拉菜單

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)懸停下拉菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Javascript json object 與string 相互轉(zhuǎn)換的簡單實現(xiàn)

    Javascript json object 與string 相互轉(zhuǎn)換的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄狫avascript json object 與string 相互轉(zhuǎn)換的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • echarts折線圖實現(xiàn)部分虛線部分實線效果的方法

    echarts折線圖實現(xiàn)部分虛線部分實線效果的方法

    在折線圖中,通常實線表示實際數(shù)據(jù),而虛線用于表示預(yù)測數(shù)據(jù),這篇文章主要介紹了echarts折線圖實現(xiàn)部分虛線部分實線效果的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • 原生JavaScript實現(xiàn)精美的淘寶輪播圖效果示例【附demo源碼下載】

    原生JavaScript實現(xiàn)精美的淘寶輪播圖效果示例【附demo源碼下載】

    這篇文章主要介紹了原生JavaScript實現(xiàn)精美的淘寶輪播圖效果,結(jié)合完整實例形式詳細分析了javascript實現(xiàn)淘寶輪播圖功能的相關(guān)HTML布局、css及js核心功能代碼,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2017-05-05
  • 原生JS封裝拖動驗證滑塊的實現(xiàn)代碼示例

    原生JS封裝拖動驗證滑塊的實現(xiàn)代碼示例

    這篇文章主要介紹了原生JS封裝拖動驗證滑塊的實現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法

    JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法

    這篇文章主要介紹了JavaScript返回網(wǎng)頁中超鏈接數(shù)量的方法,使用javascript中的document.links實現(xiàn)這一功能,需要的朋友可以參考下
    2015-04-04
  • javascript html5搖一搖功能的實現(xiàn)

    javascript html5搖一搖功能的實現(xiàn)

    這篇文章主要為大家詳細介紹了javascript html5搖一搖功能的實現(xiàn)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JS實現(xiàn)重新加載當前頁面

    JS實現(xiàn)重新加載當前頁面

    本文主要介紹用JavaScript刷新上級頁面和當前頁面。附上具體實例代碼。需要的朋友可以參考下
    2016-11-11
  • 微信小程序動態(tài)增加按鈕組件

    微信小程序動態(tài)增加按鈕組件

    這篇文章主要為大家詳細介紹了微信小程序動態(tài)增加按鈕組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 探索JavaScript函數(shù)的無限可能(函數(shù)基本概念)

    探索JavaScript函數(shù)的無限可能(函數(shù)基本概念)

    JavaScript中的函數(shù)是一種重要的編程概念,它允許我們封裝可重用的代碼塊,并在需要時進行調(diào)用,本文將深入介紹JavaScript函數(shù)的各個方面,包括函數(shù)定義和調(diào)用、參數(shù)和返回值、作用域和閉包、高階函數(shù)以及常見的函數(shù)應(yīng)用場景,感興趣的朋友一起看看吧
    2023-08-08

最新評論