原型鏈,簡單理解就是原型組成的鏈。當(dāng)訪問一個對象的某個屬性時,會先在這個對象本身屬性上查找,如果沒有找到,則會去它的__proto__隱式原型上查找,即它的構(gòu)造函數(shù)的prototype,如果還沒有找到就會再在構(gòu)造函數(shù)的prototype的__proto__中查找,這樣一層一層向上查找就會形成一個鏈?zhǔn)浇Y(jié)構(gòu),被稱為原型鏈。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
什么是原型?
在JS中,每個函數(shù)在被創(chuàng)建的時候就會有一個 prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象就是這個函數(shù)的原型對象(也就是原型),它是用來共享所有實例的屬性和方法的地方,所以
原型其實就是函數(shù)的伴生體
(與生俱來的)
var a = [1, 2, 3, 4, 5]; a.__proto__ === Array.prototype; // true
什么是原型鏈?
原型鏈,簡單理解就是原型組成的鏈。當(dāng)訪問一個對象的某個屬性時,會先在這個對象本身屬性上查找,如果沒有找到,則會去它的__proto__隱式原型上查找,即它的構(gòu)造函數(shù)的prototype,如果還沒有找到就會再在構(gòu)造函數(shù)的prototype的__proto__中查找,這樣一層一層向上查找就會形成一個鏈?zhǔn)浇Y(jié)構(gòu),我們稱為
原型鏈
。
創(chuàng)建一個構(gòu)造函數(shù):
function Person (name) { this.name = name } var cheng = new Person('Cheng'); var lin = new Person('Lin');
打印cheng和lin,可以看到兩個對象中都分別存在一個__proto__屬性
然后發(fā)現(xiàn)
console.log(cheng.__proto__ === lin.__proto__); // true
那么實例對象的這個__proto__屬性到底是什么玩意?
console.log(cheng.__proto__ === Person.prototype); // true console.log(lin.__proto__ === Person.prototype); // true
小結(jié):實例對象有一個不可枚舉的屬性 proto,這個屬性是一個指針,指向了其構(gòu)造函數(shù)的prototype也就是原型對象,實例可以通過 proto 訪問到構(gòu)造函數(shù)的原型上的方法
簡單來說,實例對象的 __proto__ 指向構(gòu)造函數(shù)的 prototype
那么,這個構(gòu)造函數(shù)的原型是什么呢?
打印Person.prototype,可以看到也存在一個__proto__屬性
console.log(Person.prototype.__proto__ === Object.prototype)
小結(jié):函數(shù)的原型本質(zhì)就是一個普通對象,所以他是來自O(shè)bject的實例,因此,原型對象的 proto 屬性指向Object.prototype。
再往下找Object.prototype的__proto__是指向哪里呢?
最后發(fā)現(xiàn)是指向null
小結(jié):Javascript中任意數(shù)據(jù)都能沿著自己的原型鏈最終找到Object.prototype
總結(jié):
實例對象的 __proto__ 指向構(gòu)造函數(shù)的 prototype,構(gòu)造函數(shù)的__proto__ 指向Object的 prototype,Object的__proto__ 最終指向null
【推薦學(xué)習(xí):javascript高級教程】
以上是es6中什么是原型鏈的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Stock Market GPT
人工智能驅(qū)動投資研究,做出更明智的決策

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

WebSocket與JavaScript:實現(xiàn)實時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)引言:隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,實時監(jiān)控系統(tǒng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。而實現(xiàn)實時監(jiān)控的關(guān)鍵技術(shù)之一就是WebSocket與JavaScript的結(jié)合使用。本文將介紹WebSocket與JavaScript在實時監(jiān)控系統(tǒng)中的應(yīng)用,并給出代碼示例,詳細(xì)解釋其實現(xiàn)原理。一、WebSocket技

JavaScript和WebSocket:打造高效的實時天氣預(yù)報系統(tǒng)引言:如今,天氣預(yù)報的準(zhǔn)確性對于日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以通過實時獲取天氣數(shù)據(jù)來提供更準(zhǔn)確可靠的天氣預(yù)報。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來構(gòu)建一個高效的實時天氣預(yù)報系統(tǒng)。本文將通過具體的代碼示例來展示實現(xiàn)的過程。We

JavaScript教程:如何獲取HTTP狀態(tài)碼,需要具體代碼示例前言:在Web開發(fā)中,經(jīng)常會涉及到與服務(wù)器進(jìn)行數(shù)據(jù)交互的場景。在與服務(wù)器進(jìn)行通信時,我們經(jīng)常需要獲取返回的HTTP狀態(tài)碼來判斷操作是否成功,根據(jù)不同的狀態(tài)碼來進(jìn)行相應(yīng)的處理。本篇文章將教你如何使用JavaScript獲取HTTP狀態(tài)碼,并提供一些實用的代碼示例。使用XMLHttpRequest

JavaScript中的HTTP狀態(tài)碼獲取方法簡介:在進(jìn)行前端開發(fā)中,我們常常需要處理與后端接口的交互,而HTTP狀態(tài)碼就是其中非常重要的一部分。了解和獲取HTTP狀態(tài)碼有助于我們更好地處理接口返回的數(shù)據(jù)。本文將介紹使用JavaScript獲取HTTP狀態(tài)碼的方法,并提供具體代碼示例。一、什么是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向服務(wù)器發(fā)起請求時,服務(wù)

JavaScript和WebSocket:打造高性能的實時數(shù)據(jù)可視化隨著互聯(lián)網(wǎng)的飛速發(fā)展,實時數(shù)據(jù)可視化對于很多領(lǐng)域都變得越來越重要。無論是金融交易、物流運輸,還是工業(yè)監(jiān)控等領(lǐng)域,實時數(shù)據(jù)的可視化都可以幫助我們更好地理解和分析數(shù)據(jù),從而做出更加明智的決策。在Web開發(fā)中,JavaScript和WebSocket技術(shù)結(jié)合起來,可以實現(xiàn)高性能的實時數(shù)據(jù)可視化。W

JavaScript和WebSocket:打造高效的實時搜索引擎引言:隨著互聯(lián)網(wǎng)的發(fā)展,用戶對實時搜索引擎的要求也越來越高。傳統(tǒng)的搜索引擎在進(jìn)行搜索時,用戶需要點擊搜索按鈕后才能得到結(jié)果,這種方式無法滿足用戶對于實時搜索結(jié)果的需求。因此,采用JavaScript和WebSocket技術(shù)來實現(xiàn)實時搜索引擎成為了一個熱門的話題。本文將詳細(xì)介紹使用JavaScri

如何使用WebSocket和JavaScript實現(xiàn)在線電子簽名系統(tǒng)概述:隨著數(shù)字化時代的到來,電子簽名被廣泛應(yīng)用于各個行業(yè)中,以取代傳統(tǒng)的紙質(zhì)簽名。WebSocket作為一種全雙工通信協(xié)議,可以與服務(wù)器進(jìn)行實時的雙向數(shù)據(jù)傳輸,結(jié)合JavaScript可以實現(xiàn)一個在線電子簽名系統(tǒng)。本文將介紹如何使用WebSocket和JavaScript來開發(fā)一個簡單的在線

如何使用JavaScript和WebSocket實現(xiàn)實時在線投票系統(tǒng)引言:隨著互聯(lián)網(wǎng)的快速發(fā)展,實時在線投票系統(tǒng)成為了各類活動和選舉中非常常見的一種形式。使用JavaScript和WebSocket技術(shù)實現(xiàn)實時在線投票系統(tǒng)具有靈活性和易用性的優(yōu)點。本文將詳細(xì)介紹如何使用JavaScript和WebSocket來實現(xiàn)一個簡單的實時在線投票系統(tǒng),并提供相應(yīng)的代碼
