js原型和原型鏈

2021-10-02 19:50:01 字數 2358 閱讀 5742

一、從圖理解js原型與原型鏈

**:紅色部分

1、所有函式都有乙個prototype指標,指向原型物件,prototype指標的意義是:當我們使用這個建構函式new出新物件的時候,新物件的原型是誰。

2、建構函式的prototype所指向的原型物件有乙個constructor指標,指回建構函式constructor指標有助於我們找到乙個物件的建構函式是誰

3、__proto__每個物件都有,js在new乙個物件的時候,會將它的__proto__指向建構函式的prototype指向的那個物件。 如果乙個物件的__proto__指向了另乙個物件,那麼前者就繼承了後者的所有屬性。

4、注意!__proto__才是真正連線原型鏈的東西,而prototype只是建構函式的乙個指標屬性而已。

foo原型~~~橙色部分

1、橙色①②③

foo是乙個函式,它的建構函式是js內部的function function()functionprototype指向了乙個物件function.prototype,因此foo__proto__就指向了function.prototype

2、橙色④

所有的函式都以function function()為建構函式,因此,所有函式(包括function function()和function object())的__proto__都指向function.prototype

藍色+綠色部分

function.prototype這個物件,它就是乙個普通的物件,它的建構函式是js內建的function object()function object()prototype指向object.prototype,因此function.prototype.__proto__就指向object.prototype,這個物件中定義了所有物件共有的屬性,比如hasownproperty()tostring()等。

同理,foo.prototype和其他自定義的物件也是__proto__指向object.prototype物件

黑色部分

object.prototype就是原型鏈的終點,它的__proto__null,js查詢屬性時,如果到這裡還沒有找到,那就是undefined

二、預設情況下,建構函式的原型的constructor屬性是指向該建構函式本身的。若用物件字面量重寫原型,則contructor屬性不存在。故若要重寫,必須給constructor重新賦值

//重新賦值

JS原型和原型鏈

建立建構函式 function word words word.prototype 建立例項 var w new word hello world w.print function w.print hello world w.alert hello world function.prototype....

js原型鏈和原型

1 原型 在js中一切皆物件,那原型也是乙個物件,通過原型可以實現物件的屬性繼承,js的物件中包含著乙個 prototype 內部屬性,這個屬性所對應的就是物件的原型。prototype 作為物件的內部屬性不能被直接訪問,所以為了方便檢視乙個物件的原型,提供了 proto 這個非標準的訪問器,在js...

JS 原型和原型鏈

先宣告乙個建構函式 function people name,age 把類的方法寫在建構函式原型物件中,子類就不能再通過呼叫父類建構函式來繼承方法 屬性還是可以繼承 給people的原型新增方法 people.prototype.speak function 建立子類繼承people functio...