一、從圖理解js原型與原型鏈
**:紅色部分
1、所有函式都有乙個foo原型~~~橙色部分prototype
指標,指向原型物件,prototype
指標的意義是:當我們使用這個建構函式new
出新物件的時候,新物件的原型是誰。2、建構函式的
prototype
所指向的原型物件有乙個constructor
指標,指回建構函式constructor指標有助於我們找到乙個物件的建構函式是誰3、
__proto__
每個物件都有,js在new
乙個物件的時候,會將它的__proto__
指向建構函式的prototype
指向的那個物件。 如果乙個物件的__proto__
指向了另乙個物件,那麼前者就繼承了後者的所有屬性。4、注意!
__proto__
才是真正連線原型鏈的東西,而prototype
只是建構函式的乙個指標屬性而已。
1、橙色①②③藍色+綠色部分
foo
是乙個函式,它的建構函式是js內部的function function()
,function
的prototype
指向了乙個物件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...