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

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

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

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

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

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

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

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

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

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

?

然后在看對象實(shí)例原型的原型

?

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

Object原型的的原型是null

?

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

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

?

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

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

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