js原型和繼承
阿新 • • 發佈:2021-10-11
1、引用型別,都具有物件特性,即可自由擴充套件屬性。
2、引用型別,都有一個隱式原型 __proto__
屬性,屬性值是一個普通的物件。
3、引用型別,隱式原型 __proto__
的屬性值指向它的建構函式的顯式原型 prototype
屬性值。
4、當你試圖得到一個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼它會去它的隱式原型 __proto__
(也就是它的建構函式的顯式原型 prototype
)中尋找。
在自定義建構函式時原型物件只會獲得constructor
屬性,其他的都是從Object
繼承而來,呼叫建構函式建立例項就是將例項的[[Prototype]]
指標被賦值為建構函式的原型物件。[[Prototype]]
在指令碼中沒有訪問它的標準方式,但是瀏覽器提供了__proto__
.
constructor
屬性是原型的它會指回與之關聯的建構函式
個人理解:一般形式的物件陣列,引用型別,有的是__proto__
指向它的原型,而建構函式它的是prototype
屬性指向原型,這兩個都是指向原型的。
實列和建構函式是一級的(它兩更像是兄弟關係),它們指向同一個原型(建構函式通過prototype
訪問,例項通過__proto__
訪問)報錯的兩行是打錯了但是不影響
然後在看物件例項原型的原型
這是物件例項xiaoMing的原型的原型,也是Object
的原型內建的,所有的例項物件建構函式即物件型別都是Object的例項
Object
原型的的原型是null
Object實際只是一個概念,JavaScript這個語言基於物件,是說所有內建型別都被抽象出了一組公用的方法和屬性(也可以叫行為和狀態),我們就想像只擁有這些特性的一個東西就是Object
簡單的關係如下圖