js的__proto__、constructor和prototype屬性

__proto__和constructor屬性是對象所獨有的;prototype屬性是函數所獨有的。可是因爲JS中函數也是一種對象,因此函數也擁有__proto__和constructor屬性。ide

先來看下面這段代碼:
function foo(){}
let f = new foo();函數

foo()是函數,它的constructor屬性指向Function(),它的prototype屬性指向foo.prototype,它的__proto__屬性指向Function.prototype。
f是foo實例化的對象,它的constructor屬性指向foo(),__proto__屬性指向foo.prototype。prototype

__proto__屬性的做用就是當訪問一個對象的屬性時,若是該對象內部不存在這個屬性,那麼就會去它的__proto__屬性所指向的那個對象(父對象)裏找,一直找,直到__proto__屬性的終點null,而後返回undefined,經過__proto__屬性將對象鏈接起來的這條鏈路即咱們所謂的原型鏈。
prototype屬性的做用就是讓該函數所實例化的對象們均可以找到公用的屬性和方法。
constructor屬性的含義就是指向該對象的構造函數,全部函數(此時當作對象了)最終的構造函數都指向Function。
對象

相關文章
相關標籤/搜索