prototype 與 __proto__

prototype 與 梳理瀏覽器

萬物皆對象,函數也是對象

prototype 與 __proto__ 的關係

構造函數 只是 普通的函數, 可是不能在裏面return任何東西。
假設存在構造函數 A,而且
a = new A()
那麼在建立a的時候,會執行 a.__proto__ = A.prototype
也就是說,一個對象的__proto__屬性,是在它出生時,由它的構造函數的prototype屬性決定的。
注意:__proto__不該該被修改,可是,構造函數的prototype是能夠修改的。函數

原型鏈

假設obj是一個對象,那麼obj上的原型鏈就是: obj.__proto__
obj.__proto__.__proto__
obj.__proto__.__proto__.__proto__
obj.__proto__.__proto__.__proto__.__proto__
...prototype

讀取屬性的原理

假設如今要讀取obj上的屬性p,也就是 obj["p"] 或者 obj.p,瀏覽器會進行如下嘗試,第一個成功的會被返回 在obj上查找p
在obj.__proto__上查找p
在obj.__proto__.__proto__ 查找p
以此類推...對象

js裏的類

js裏的類就是構造函數,Object,Function,Array,Date,這些大寫字母開頭的東西,都是函數而已
也就是說,Object,Function,Array。。等等,它們的類型都是Function
Object的類型是Function,它的__proto__ 就是 Function.prototype
Function的類型是Function,它的__proto__就是 Function.prototype原型鏈

相關文章
相關標籤/搜索