js原型鏈理解

2022-04-22 04:27:54 字數 1794 閱讀 3293

關於原型鏈的問題也是領悟了很久,有時候突然覺得什麼都懂了,但下乙個問題出現令人一臉蒙比,好像又什麼都不懂,這是最近的一點經驗,記下來方便以後複習。

先貼上最經典的原型煉圖,說實話,這圖是真的很精髓了

首先我們要知道這句話: js中所有的東西(當然都是物件)都有__proto__,所有的函式除了有__proto__,還有prototype;

然後我們要區分這兩個東西,__proto__和prototype.

1. __proto__,起初我不明白為什麼所有的名字都是英文的,這個非得要弄幾個槓。現在終於覺得這是非常形象的,因為__proto__代表著指標,下面我們統一把這個叫原型指標(自己叫的,也不知道有沒有官方叫法),它的含義很明顯了,這個屬性是指向某個東西,就是建構函式的原型物件,實際上也就是那個原型物件在堆空間裡的記憶體位址

2. prototype,他才是所謂的函式的原型物件,他肯定含有的兩個屬性。1 constructor,代表這個東西是哪個函式的原型物件;2,他也是物件,肯定也有原型指標;

反正我開始的理解難點是在這裡:子類不是繼承來自父類的原型嗎。那這個子類的指標__proto__直接就指向父類(建構函式),這樣一級級找上去不久行了?這不是很符合他來自於父類嗎?我們看一下,這樣找到funtion(就是途中第三個boss,我叫它大function)的時候,它的原型指標應該指向誰呢?明顯沒有了,因為他就是所有函式的爸爸,沒有比它更高階的建構函式了。所以這種是行不通的。哦,這個也有解決辦法,那我們也讓這個大function的指標指向null。但是這樣做會有很大的缺點,我們在接下來js採用的方法會說到

js採用了另一種辦法,我們給每個建構函式(所有的函式都可以叫建構函式)都定義乙個prototype屬性。讓子類的這個指標不是指向建構函式,而是指向建構函式的prototype(原型物件),這個物件中的constuctor屬性反過來指向這個函式本身,然後它的原型指標自然也要指向它的建構函式的原型物件,像這樣乙個物件的建構函式是誰呢。就是我們的object(大object)。開闢了乙個新屬性prototype有乙個很大的好處就是,我們可以把建構函式想共享給所有子類的那部分屬性、方法和不能共享的那部分隔離開,因為每個例項物件總有些東西是自己特有的,每個例項都不一樣,比如名字(私有屬性),這種就直接在建構函式裡用this.name 定義。只把需要共享,傳承下去的那部分放在prtotype原型物件裡面就好了。

下面我們乙個對比的**就能明白那些共享部分是怎麼繼承的了

1

//先確定一下角色。father是自己的建構函式,child是它的乙個例項

2function

father(){};

3var child= new

father;

4 child.__proto__ ==father.prototype;

5 child.__proto__.__proto__ == father.prototype.__proto__ ==object.prototype

6 child.__proto__.__proto__.__proto__ ==father.prototype.__proto__.__proto__ == object.prototype.__proto__ == null7//

就通過__proto__指標鏈不斷的訪問到上一級原型物件裡共享的方法8//

自己封裝的建構函式裡 我們也可以加入要分享的方法,只需要加到father的9//

原型物件prototype,那所有的子類就可以訪問到了

10 father.prototype.say=function()

js 原型 原型鏈理解

執行發現如下 自定義乙個函式,函式包含兩個關鍵資料 prototype,proto 1 原型 prototype person具有prototype屬性 包含我們定義的屬性name,age以及constructor,並且constructor指向我們的person函式,可以理解為prototype就...

理解js原型和原型鏈

一.普通物件和函式物件 js中,萬物皆物件,大體分為兩種 普通物件,函式物件。凡是通過new function 建立的都是函式物件,其他的則為普通物件。下面舉例說明 function fun1 function var fun2 function function var fun3 new func...

js原型鏈的理解

其實之前對js原型鏈有個基本的理解,但工作中用到的並不多,逐漸忘記了。所以準備寫個部落格。我覺得首先得明白乙個,就是每一次建立乙個建構函式 其實就是普通的函式 的時候,都會根據乙個特定的規則建立乙個原型屬性 prototype 其中包括兩項 construct和 proto 其次先來看下構造 函式建...