原型鏈 prototype proto 那些事

2022-04-29 07:42:11 字數 1604 閱讀 7724

1、prototype:每乙個建構函式都有乙個原型物件,這個物件就是prototype。這個建構函式如何找到他的原型物件呢?每個建構函式都會有乙個prototype屬性,指向它的原型物件。這就是相當於建構函式的乙個屬性,注意它不是原型鏈中的那個關鍵的鍊子。

2、constructor:每個原型物件都包含乙個指向建構函式的指標,這個指標就是constructor,從而實現了建構函式和其原型之間的雙向繫結。a.prototype.constructor指向a

3、_proto _ :所有的物件都含有_proto_標籤,a物件有_proto_標籤,a.prototype也有_proto_標籤。你可以簡單的理解為指標。它的作用就是原型鏈形成的關鍵,靠它串聯起來,它會是指向當前物件的建構函式的原型物件。紅寶書中也用[[prototype]]表示,是乙個意思

舉個栗子:

如圖中所示,右邊一列的原型鏈跟上面講的沒什麼兩樣。但是左邊這三個就神奇了,我們都知道所有的原型鏈的頂端最後都指向object.prototype。但是他們的建構函式,像function、array甚至object都指向function.prototype。其實這也好理解,剛剛也說了嘛,他們都是建構函式,既然是函式,當然會乖乖的歸在function.prototype下了。當然最後仍然歸一到了object.prototype!!

也就是說所有的建構函式的_ _proto_ _如果沒有改寫的話都是指向function.prototype。乙個函式的constructor都是function,具體原因看完下面第三部分就明白了。

//繼承了supertype

subtype.prototype=new supertype();

subtype.prototype.getsubvalue=function();

var instance=new subtype();

alert(instance.getsupervalue());

這個例子是紅寶書原型鏈繼承的乙個例子,書中也畫了**。作為初學者,可能會犯很多錯誤,下圖就是之前我自以為是的「完善的圖」,但其實都是畫蛇添足。

下面是錯誤示例!!!

注意

上圖有很多錯誤,下面我從上到下的順序一一指正出來。

正確的**

原型 原型鏈

var animal function var dog function animal.price 2000 dog.prototype animal var tidy new dog console.log dog.price 為什麼輸出 undefined console.log tidy.pr...

原型,原型鏈

原型object.hasownproperty proname object 乙個物件的例項 propname 乙個屬性名稱的字串值 返回乙個布林值原型鏈中的this 原型物件 原型物件的作用 一般情況下,會把方法宣告在原型物件裡。目的是實現繼承。當物件訪問自身屬性或方法時,先從自身找有沒有,如果有...

原型 原型鏈

在最近的原型和原型鏈的學習中,感覺壓力有點大,學習難度也比較大,但又很基礎很重要,我們在學習中得要下很大的功夫才行。無論什麼時候,只要建立了乙個新的函式,就會根據一組特定的規則為這個函式建立乙個prototype的屬性,prototype這個屬性指向函式的原型物件,然後所有的的原型物件都會有乙個co...