首頁 web前端 js教程 Javascript 學習筆記之 物件篇(二) : 原型物件_基礎知識

Javascript 學習筆記之 物件篇(二) : 原型物件_基礎知識

May 16, 2016 pm 04:43 PM
javascript

Javascript 是唯一一個被廣泛運用的原型式繼承的語言,所以理解兩種繼承方式的差異是需要時間的。

第一個主要差異就是 Javascript 使用原型鏈來繼承:

function Foo() {
 this.value = 42;
}
Foo.prototype = {
 method: function() {}
};
function Bar() {}
登入後複製

設定 Bar 的 prototype 為 Foo 的物件實例:

Bar.prototype = new Foo();
Bar.prototype.foo = 'Hello World';
登入後複製

確保 Bar 的建構子為本身,並新建一個 Bar 物件實例:

Bar.prototype.constructor = Bar;
var test = new Bar();
登入後複製

下面我們來看下整個原型鏈的組成:

test [instance of Bar]
 Bar.prototype [instance of Foo]
 { foo: 'Hello World' }
 Foo.prototype
  { method: ... }
  Object.prototype
  { toString: ... /* etc. */ }
登入後複製

在上面的範例中,物件 test 將會同時繼承 Bar.prototype 和 Foo.prototype。因此它可以存取定義在 Foo 中的函數 method。當然,它也可以存取屬性 value。需要提到的是,當 new Bar() 時並不會建立一個新的 Foo 實例,而是重複使用它原型物件自帶的 Foo 實例。同樣,所有的 Bar 實例都共享同一個 value 屬性。我們舉例說明:

test1 = new Bar();
 test2 = new Bar();
 Bar.prototype.value = 41;
 test1.value //41
 test2.value//41
登入後複製

原型鏈查找機制

當存取一個物件的屬性時,Javascript 會從物件本身開始往上遍歷整個原型鏈,直到找到對應屬性為止。如果此時到達了原型鏈的頂部,也就是上例中的 Object.prototype,仍然未發現需要尋找的屬性,那麼 Javascript 就會傳回 undefined 值。

原型物件的屬性

儘管原型物件的屬性被 Javascript 用來建立原型鏈,我們仍然可以值賦給它。但是原始值複製給 prototype 是無效的,如:

function Foo() {}
Foo.prototype = 1; // no effect
登入後複製

這裡講個本篇的題外話,介紹下什麼是原始值:
在 Javascript 中,變數可以存放兩種類型的值,分別是原始值和參考值。

1.原始值(primitive value):

原始值是固定而簡單的值,是存放在堆疊 stack 中的簡單資料段,也就是說,它們的值直接儲存在變數存取的位置。
原始型別有以下五種型: Undefined, Null, Boolean, Number, String。

2.引用值(reference value):

引用值則是比較大的對象,存放在堆 heap 中的對象,也就是說,儲存在變數處的值是一個指針  pointer,指向儲存對象的記憶體。所有引用類型都整合自 Object。
原型鏈效能問題

如果需要尋找的屬性位於原型鏈的上端,那麼查找過程對於效能而言無疑會帶來負面影響。當在性能要求必要嚴格的場景中這將是需要重點考慮得因素。此外,試圖尋找一個不存在屬性時將會遍歷整個原型鏈。
同樣,當遍歷一個物件的屬性時,所有在原型鏈上的屬性都將被存取。

總結

理解原型式繼承是寫較為複雜的 Javascript 程式碼的前提,同時要注意程式碼中原型鏈的高度。當面臨效能瓶頸時要學會將原型鏈分開開來。此外,要將原型物件 prototype 和原型 __proto__ 區分開來,這裡主要討論原型物件 prototype 就不闡述關於原型 __proto__ 的問題了,

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

簡易JavaScript教學:取得HTTP狀態碼的方法

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript與WebSocket:打造高效率的即時天氣預報系統

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

如何在JavaScript中取得HTTP狀態碼的簡單方法

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

javascript如何使用insertBefore

See all articles