js的原型和原型鏈

2021-10-02 19:16:59 字數 1402 閱讀 3608

所有引用型別(函式,陣列,物件)都擁有__proto__屬性(隱式原型)

所有函式擁有prototype屬性(顯式原型)(僅限函式)

原型物件:擁有prototype屬性的物件,在定義函式時就被建立

//建立建構函式

function

human

(hname,hage)

human.prototype.

intr

=function()

,今年$歲`)

;}//建立例項

var zhangsan =

newhuman

('張三',20

);var lisi =

newhuman

('李四',23

);zhangsan.

intr()

;//我是張三,今年20歲

lisi.

intr()

;//我是李四,今年23歲

通過建構函式建立的例項,原型都指向建構函式的prototype屬性,zhangsan和lisi中都沒有intr屬性,但能正常輸出,是因為繼承了建構函式human的原型,使用了原型中的屬性。

查詢屬性時,如果本身沒有,就會去__proto__中查詢,也就是建構函式的顯式原型中查詢,如果建構函式中也沒有該屬性,因為建構函式也是物件,也有__proto__,那麼會去它的顯式原型中查詢,一直到null,如果沒有則返回undefined,期間如果找到了,便會直接使用找到的屬性。

由__proto__連線形成的鏈式關係就是原型鏈

zhangsan.__proto__.constructor  == function human(){}

lisi.__proto__.constructor == function human(){}

zhangsan.___proto__.__proto__== object.prototype

lisi.___proto__.__proto__== object.prototype

zhangsan.___proto__.__proto__.__proto__== object.prototype.__proto__ == null

lisi.___proto__.__proto__.__proto__== object.prototype.__proto__ == null

例項.通過__proto__形成原型鏈而非protrotype,因為張三和李四是通過同乙個建構函式建立的,因此他們的原型鏈相同。

關係大致如下圖:

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...