0:00:00.270,0:00:03.334 在前一個講談中,我們學到如何製作物件類型, 0:00:03.334,0:00:06.184 來代表我們兩種類似「溫斯頓」的物件。 0:00:06.194,0:00:09.034 然後藉由建構子,初始化它們。 0:00:09.234,0:00:13.472 一個物件類型,不只需要與其屬性相關聯。 0:00:13.472,0:00:15.866 它也可以與函數相關聯。 0:00:15.866,0:00:20.286 想想世界上所有的物件類型,例如,我們人類。 0:00:20.287,0:00:22.307 我們都有身高和年齡, 0:00:22.307,0:00:26.287 也有可以做的事情,例如,[br]睡覺,吃飯,和編輯程式。 0:00:26.287,0:00:30.679 我們需要能將這些函數與其物件類型相關聯。 0:00:30.679,0:00:34.279 在此程式裡,我們將接續上次的編輯, 0:00:34.289,0:00:39.439 我們這裡已有了「繪製溫斯頓」的函數,[br]用來呼叫兩種「溫斯頓」物件。 0:00:39.439,0:00:44.916 如果能將它附帶於溫斯頓物件類型裡,[br]不就更簡便了? 0:00:45.046,0:00:48.309 我們是可以這麼做,而且很容易。 0:00:48.569,0:00:52.475 所以在建構子裡,我們要編寫「溫斯頓 」, 0:00:52.475,0:00:55.575 大寫的「W 」以及「 點」、「原型」。 0:00:55.575,0:00:59.232 這「原型」是一個新詞,你可能沒見過。 0:00:59.232,0:01:06.071 「原型」是物件的屬性,可附帶函數。 0:01:06.071,0:01:09.711 這將表示,每個物件的實例, 0:01:09.711,0:01:12.531 也將附帶這些函數。 0:01:12.989,0:01:17.632 所以我們可以用「點」、「原型」、「點」,[br]然後「函數的名稱」。 0:01:17.632,0:01:24.306 所以我們用「繪製等於」,然後就可以[br]把「繪製溫斯頓」代碼, 0:01:24.306,0:01:28.026 我們就把它放置到這裡面。 0:01:28.096,0:01:32.811 好了。我們目前完成的是我們附帶了繪製函數 0:01:32.811,0:01:34.938 於我們的溫斯頓原型。 0:01:34.938,0:01:40.008 這意味著,我們應該能呼叫「繪製()」[br]於任一種類似「溫斯頓」的物件。 0:01:40.008,0:01:45.031 因此,我們應該能呼叫「繪製()」[br]於「溫斯頓少年」或「溫斯頓成人」。 0:01:45.331,0:01:49.549 當我們有了這樣能夠[br]呼叫物件的函數, 0:01:49.549,0:01:54.653 我們稱它為「方法」。所以,[br]從此你會聽我說「方法」這名詞。 0:01:54.653,0:01:58.092 我們就稱此為「繪製方法」。好了。 0:01:58.092,0:02:03.863 現在我們來刪除這個,還有刪除這個,[br]然後看看我們是否能呼叫「繪製()」? 0:02:03.863,0:02:06.769 「溫斯頓少年」、「點」、「繪製()」。 0:02:07.009,0:02:08.287 好的,我們有個錯誤。 0:02:08.287,0:02:13.577 這裡有明顯的錯誤。[br]它說,「溫斯頓物件沒被定義」。 0:02:13.577,0:02:18.370 問題是,先前我們傳遞[br]這個參數到「繪製溫斯頓」裡, 0:02:18.370,0:02:22.710 是一個溫斯頓物件,但現在我們傳遞不了。 0:02:22.710,0:02:27.402 所以,我們可以改變這個來傳遞,[br]然後,讓我們看看, 0:02:27.402,0:02:30.339 在這裡會通過甚麼?[br]我們得通過「溫斯頓少年」。 0:02:30.339,0:02:33.901 好了,解決了,但那似乎滿滑稽的。 0:02:33.901,0:02:38.081 我已經在物件本身呼叫繪製。 0:02:38.081,0:02:41.775 我應該不必還得另外再傳遞到物件裡。 0:02:41.775,0:02:43.945 這似乎是多餘的。 0:02:43.945,0:02:45.665 沒錯,我們應該不必這麼做。 0:02:45.665,0:02:48.245 所以,讓我們把這裡刪除。現在想想, 0:02:48.245,0:02:51.544 我們如果在物件裡,我們能使用甚麼 0:02:51.544,0:02:54.274 來取讀物件的屬性呢? 0:02:54.274,0:02:58.054 你可以看看我們的建構子,[br]然後想起那個特殊的關鍵字,「此」, 0:02:58.054,0:03:04.124 然後想到,啊,如果我們改變這個為「此」! 0:03:04.124,0:03:07.923 讓我們將「溫斯頓物件」改寫為「此」。 0:03:08.383,0:03:12.951 因為現在我們在這物件裡,[br]所以物件正在評估這函數, 0:03:12.951,0:03:16.781 好讓「此」能用來引用當前的物件。 0:03:16.781,0:03:20.361 這樣,我們只要用「此」,我們就能讀取, 0:03:20.361,0:03:23.041 當前物件的所有屬性。 0:03:23.041,0:03:26.520 這是完全有效的,看到了嗎?是不是很酷? 0:03:26.520,0:03:31.547 我們現在可以用「溫斯頓成人」、[br]「點」、「繪製()」。 0:03:31.907,0:03:35.291 成功!它將能讀取「溫斯頓成人」的屬性, 0:03:35.291,0:03:38.021 因為那是被呼叫的物件。 0:03:38.021,0:03:41.022 所以,很酷的是,這個「此」關鍵字。 0:03:41.022,0:03:44.292 即使,在說時會令人有點混淆。 0:03:45.532,0:03:49.258 好了。這還滿有趣的。[br]接下來,我們再添加一個方法。 0:03:49.258,0:03:51.908 那麼,溫斯頓還會做什麼? 0:03:51.908,0:03:56.238 也許他會說話。所以我們來製作一個[br]「溫斯頓點原型點講話」。 0:03:56.238,0:04:00.688 這樣我們就可附帶許多的方法於原型裡。 0:04:00.858,0:04:05.241 所以我們來說,「我是溫斯頓!」 0:04:05.241,0:04:12.081 然後,我們再用「此」、「點X+ 20」,[br]和有「此」、「點Y + 150」。 0:04:12.751,0:04:15.954 然後,你知道的,什麼都不會發生。 0:04:15.954,0:04:19.534 那是因為我還沒實際的呼叫那個函數。 0:04:19.534,0:04:24.048 我們讓這少年˙講話。[br]「溫斯頓少年點講話()」。青少年老愛說話。 0:04:24.048,0:04:30.299 好的,「我是溫斯頓」。成功了![br]然後用「溫斯頓成人點講話()」。 0:04:30.299,0:04:31.928 成功了! 0:04:31.928,0:04:36.438 現在我們的溫斯頓物件類型,有了它的屬性: 0:04:36.438,0:04:41.496 暱稱、年齡、X、Y;[br]而且它有了功能:行為、方法; 0:04:41.496,0:04:44.246 行為的不同取決於其屬性。 0:04:44.246,0:04:48.146 我們能創建許多個我們想要的溫斯頓實例, 0:04:48.146,0:04:50.649 然後以其中一種方法就能呼叫它。 0:04:50.649,0:04:52.873 這很酷,是吧?