一、構造函數面試
a、什麼是構造函數? 解釋:經過關鍵字new 建立的函數叫作構造函數 做用:用來建立一個對象 廢話少說直接上代碼,首先咱們仍是建立一個構造函數人類
而後咱們在建立兩個實例,一個凡塵 一個吳彥祖!畢竟只有咱們2我的的顏值能夠進行匹配
咱們能夠看到凡塵和彥祖都有一個屬性name和一個方法eat;那麼咱們簡單思考一下,由於凡塵和彥祖都是經過構造函數new Person建立出來的,那麼他們倆個的eat方法是否相等?
二、原型prototype函數
一、什麼是prototype? a、prototype是每個函數自帶的一個屬性 b、prototype屬性指向一個對象,簡稱原型。全部prototype稱爲原型 二、原型有什麼做用? 一、節約內存 二、擴展屬性和方法 三、能夠實現類的繼承
三、接下來咱們建立2個函數,來查看函數裏面是否有prototype這個屬性
從以上例子中咱們能夠更加確定每個函數都有一個prototype屬性而這個屬性指向一個object。若是prototype指向一個對象的話那麼咱們天然就能夠給它添加屬性和方法了this
四、如何在prototype原型上面添加屬性和方法?spa
五、由於這個方法是在構造函數Person的原型上添加的,所以當每次實例化一個對象的時候,每一個對象都有這樣一個方法,並且都是調用的同一個方法prototype
六、那麼接下來咱們看下咱們加在原型上面的這個方法在這個實例化對象的哪裏放着。3d
咱們能夠清晰的看到咱們實例化出來的對象,這個eat方法在__proto__裏面放着,而這個__proto__一樣也指向了一個對象。那麼咱們就不得不思考下構造函數的prototype與實例化對象裏面的__proto__是不是同一個東西code
七、構造函數的prototype與實例化__proto__之間的關係對象
不比較不知道,一比較嚇一跳。他們不只發現裏面的東西相同,並且判斷結果也相同。並且你會發現你經過原型prototype添加的方法在__proto__裏面也會出現。換句話說也就是__proto__能夠訪問prototype裏面的全部屬性和方法blog
三、prototype--->__proto__---->實例化對象三者之間的關係繼承
一、prototype總結 解釋:每個函數都有一個prototype這個屬性,而這個屬性指向一個對象,咱們簡稱原型 做用: 一、節約內存 二、擴展屬性和方法 三、能夠實現類之間的繼承 二、__proto__總結 一、每個對象都有一個__proto__屬性 二、 __proto__指向建立本身的那個構造函數的原型 三、對象能夠直接訪問本身__proto__裏面的屬性和方法 三、constructor總結 constructor指向建立本身的那個構造函數 接下來咱們說說三者之間的關係。 當咱們建立一個構造函數的時候這個構造函數自帶了一個prototype屬性,而這個屬性指向一個對象,也就是原型對象。這個原型對象裏面有一個constructor構造器,它的做用是指向建立本身的構造函數。除此以外prototype還能夠存放公共的屬性和方法。當咱們實例化一個對象的時候,這個對象自帶了一個__proto__屬性,這個__proto__指向建立本身的構造函數的原型對象。可使用這個原型對象裏面的屬性和方法。那麼接下來咱們用一個栗子和內存圖來表示