【面向物件】【prototype __proto__ 例項化物件 三者之間的關係】 (四)
阿新 • • 發佈:2020-08-12
1、建構函式
a、什麼是建構函式? 解釋:通過關鍵字new 建立的函式叫做建構函式 作用:用來建立一個物件 廢話少說直接上程式碼,首先我們還是建立一個建構函式人類
然後我們在建立兩個例項,一個凡塵 一個吳彥祖!畢竟只有我們2個人的顏值可以進行匹配
我們可以看到凡塵和彥祖都有一個屬性name和一個方法eat;那麼我們簡單思考一下,因為凡塵和彥祖都是通過建構函式new Person創建出來的,那麼他們倆個的eat方法是否相等?
列印結果是false.為什麼會是false? 這個時候就不得不說一個經典的面試題了!!! 當建立建構函式的時候js執行了哪些操作?
2、原型prototype
1、什麼是prototype? a、prototype是每一個函式自帶的一個屬性 b、prototype屬性指向一個物件,簡稱原型。所有prototype稱為原型 2、原型有什麼作用? 1、節約記憶體 2、擴充套件屬性和方法 3、可以實現類的繼承
3、接下來我們建立2個函式,來檢視函式裡面是否有prototype這個屬性
從以上例子中我們可以更加肯定每一個函式都有一個prototype屬性而這個屬性指向一個object。如果prototype指向一個物件的話那麼我們自然就可以給它新增屬性和方法了
4、如何在prototype原型上面新增屬性和方法?
5、因為這個方法是在建構函式Person的原型上新增的,因此當每次例項化一個物件的時候,每個物件都有這樣一個方法,而且都是呼叫的同一個方法
6、那麼接下來我們看下我們加在原型上面的這個方法在這個例項化物件的哪裡放著。
我們可以清晰的看到我們例項化出來的物件,這個eat方法在__proto__裡面放著,而這個__proto__同樣也指向了一個物件。那麼我們就不得不思考下建構函式的prototype與例項化物件裡面的__proto__是否是同一個東西
7、建構函式的prototype與例項化__proto__之間的關係
不比較不知道,一比較嚇一跳。他們不僅發現裡面的東西相同,而且判斷結果也相同。而且你會發現你通過原型prototype新增的方法在__proto__裡面也會出現。換句話說也就是__proto__可以訪問prototype裡面的所有屬性和方法
3、prototype--->__proto__---->例項化物件三者之間的關係
1、prototype總結 解釋:每一個函式都有一個prototype這個屬性,而這個屬性指向一個物件,我們簡稱原型 作用: 1、節約記憶體 2、擴充套件屬性和方法 3、可以實現類之間的繼承 2、__proto__總結 1、每一個物件都有一個__proto__屬性 2、 __proto__指向建立自己的那個建構函式的原型 3、物件可以直接訪問自己__proto__裡面的屬性和方法 3、constructor總結 constructor指向建立自己的那個建構函式 接下來我們說說三者之間的關係。 當我們建立一個建構函式的時候這個建構函式自帶了一個prototype屬性,而這個屬性指向一個物件,也就是原型物件。這個原型物件裡面有一個constructor構造器,它的作用是指向建立自己的建構函式。除此之外prototype還可以存放公共的屬性和方法。當我們例項化一個物件的時候,這個物件自帶了一個__proto__屬性,這個__proto__指向建立自己的建構函式的原型物件。可以使用這個原型物件裡面的屬性和方法。那麼接下來我們用一個栗子和記憶體圖來表示