當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

js原型和繼承
2021-10-11 15:03:03

1、引用類型,都具有對象特性,即可自由擴(kuò)展屬性。

2、引用類型,都有一個隱式原型 __proto__ 屬性,屬性值是一個普通的對象。

3、引用類型,隱式原型 __proto__ 的屬性值指向它的構(gòu)造函數(shù)的顯式原型 prototype 屬性值。

4、當(dāng)你試圖得到一個對象的某個屬性時,如果這個對象本身沒有這個屬性,那么它會去它的隱式原型 __proto__(也就是它的構(gòu)造函數(shù)的顯式原型 prototype)中尋找。

在自定義構(gòu)造函數(shù)時原型對象只會獲得constructor屬性,其他的都是從Object繼承而來,調(diào)用構(gòu)造函數(shù)創(chuàng)建實例就是將實例的[[Prototype]]指針被賦值為構(gòu)造函數(shù)的原型對象。[[Prototype]]在腳本中沒有訪問它的標(biāo)準(zhǔn)方式,但是瀏覽器提供了__proto__.

constructor屬性是原型的它會指回與之關(guān)聯(lián)的構(gòu)造函數(shù)

個人理解:一般形式的對象數(shù)組,引用類型,有的是__proto__指向它的原型,而構(gòu)造函數(shù)它的是prototype屬性指向原型,這兩個都是指向原型的。

實列和構(gòu)造函數(shù)是一級的(它兩更像是兄弟關(guān)系),它們指向同一個原型(構(gòu)造函數(shù)通過prototype訪問,實例通過__proto__訪問)報錯的兩行是打錯了但是不影響

?

然后在看對象實例原型的原型

?

這是對象實例xiaoMing的原型的原型,也是Object的原型內(nèi)置的,所有的實例對象構(gòu)造函數(shù)即對象類型都是Object的實例

Object原型的的原型是null

?

Object實際只是一個概念,JavaScript這個語言基于對象,是說所有內(nèi)建類型都被抽象出了一組公用的方法和屬性(也可以叫行為和狀態(tài)),我們就想像只擁有這些特性的一個東西就是Object

簡單的關(guān)系如下圖

?

當(dāng)你調(diào)用對象實例的一個方法或者屬性會先查詢你自身有沒有,如果有就調(diào)用,如果沒有就查它的原型,如果還是沒有就查原型的原型直到null,還是沒有就報錯。

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >