物件導向 大白話版(四) 海賊王

2022-09-18 04:36:21 字數 3158 閱讀 2343

1、建構函式

a、什麼是建構函式?

解釋:通過關鍵字new 建立的函式叫做建構函式

作用:用來建立乙個物件

廢話少說直接上**,首先我們還是建立乙個建構函式人類

然後我們在建立兩個例項,乙個凡塵 乙個吳彥祖!畢竟只有我們2個人的顏值可以進行匹配

我們可以看到凡塵和彥祖都有乙個屬性name和乙個方法eat;那麼我們簡單思考一下,因為凡塵和彥祖都是通過建構函式new person建立出來的,那麼他們倆個的eat方法是否相等?

列印結果是false.為什麼會是false? 這個時候就不得不說乙個經典的面試題了!!!

當建立建構函式的時候js執行了哪些操作?

1、在記憶體中開闢了一塊空間

2、把this指向了當前物件

通過這個面試題就可想而知為什麼不相等了,位址的指向都不相同了還指望他們相同嗎?如果還不理解我們還可以舉乙個通俗易懂的栗子,假設你和隔壁老王都有乙個孩子,你們有乙個公共的方法「教育孩子」,你可以想象乙個你和隔壁老王的孩子都不在一起,倆的教育方法名字雖然相同,但是你能指望老王教育出來的孩子和你教育出來的孩子能夠一模一樣?別天真了孩子,要是都一樣的話那麼這個世界上就沒有忠孝禮義廉了

那麼問題來了我們如何才能讓他們兩個的方法都相等呢?也就是說如何才能讓他們都呼叫同乙個方法,畢竟每次都呼叫不同的方法多麼浪費記憶體!!!!

那麼我們可不可以這樣將這個方法寫在物件外面讓他們呼叫的這個方法位址執行外面的這個函式?

貌似可以!!!但是如果要是有多個方法的時候該怎麼辦?難到我需要在外面定義多個全域性函式嗎?畢竟我們主張的是盡量減小全域性變數和全域性函式,第一是為了防止變數名的衝突。第二也是為了初學者的詞彙量著想 第三也是為了防止變數的汙染

難到就沒有什麼完美的解決方案嗎?

那下面就不得不說下我們偉大的原型prototype

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__指向建立自己的建構函式的原型物件。可以使用這個原型物件裡面的屬性和方法。那麼接下來我們用乙個栗子和記憶體圖來表示

mysql用大白話解釋 大白話說說mysql索引

前面其實寫了好幾篇關於 mysql 索引的文章了,文章中有具體的例項和 sql 語句,這篇文章我想再用純大白話講講 mysql 索引,文中不涉及具體 sql 我之前甚至想過為啥要用資料庫來儲存資料,用普通的 txt 或者 word 這類檔案不行麼,這個問題其實可以從幾個方面來看,乙個是併發訪問資料加...

快速排序(大白話)

假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方便,就讓第乙個數6作為基準數吧。接下來,需要將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數...

大白話系列 zookeeper

zookeeper主要服務於分布式系統,可以看做乙個分布式協調系統,主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。上面的解釋有點抽象,簡單來說zookeeper 檔案系統 監聽通知機制。zookeeper的資料結構,跟uni...