JS中原型與原型鏈詳解

JavaScript中,原型原型鏈都是老生常談的問題了,但也是面試常考項,相關文章已有很多,但大多晦澀難懂,在本文中,主要從幾個概念和圖出發,先分別理解原型原型對象等概念,再來理清其中的關係。面試

1. 理解原型

prototype即爲原型,**_proto_**稱爲隱式原型。先後有兩個下劃線。它是對外隱藏的,咱們在程序開發過程當中,不會直接使用它。下面咱們來詳細理解:函數

1. 每一個函數都有一個prototype屬性

1. 自定義函數

2. 構造器----Object、Array、Function、Boolean、String、Number等

每一個函數,都會有不少屬性(由於函數也是對象,而對象是屬性的集合),其中必定會有一個 prototype屬性。 這個屬性的名字是: prototype,它的值是一個對象,即爲 原型對象

2. 每一個prototype(原型對象),都有一個方法constructor

函數的prototype屬性是一個對象----原型對象,這個對象中有有很對方法(根據函數的不一樣,裏面的方法不一樣),但必定有一個方法constructor這方法 constructor 指向 這個函數自己,如: prototype

3. 每一個對象都有一個 _proto_ 屬性

每一個對象,都有一個 _proto_ 屬性 特別的, 對於函數而言,因函數自己也是對象,因此,每一個函數都會有一個 prototype 和一個 _proto_ (每邊兩個下劃線)屬性。 結論: 對象的_proto_ 屬性指向 建立這個對象的函數的 prototype

2. 原型鏈

定義 若是訪問一個對象的屬性時,先在這個對象的屬性中查找,若是找不到,則沿着 ___ptoto___這個屬性向上找尋prototype,若是__proto__這個所指對象中還沒找到,就在__proto__所指對象的__proto__屬性所指的prototype對象中去找,依次查找下去,造成相似一條鏈,稱爲原型鏈 理解如: 3d

咱們基本概念與關係已瞭解,下圖可以幫咱們更好的理解原型原型鏈
其實,原型與原型鏈不難理解,只需記得上面加黑的結論及其關係,再加以理解,便可。
相關文章
相關標籤/搜索