1 00:00:00,270 --> 00:00:03,334 在前一個講談中,我們學到如何製作物件類型, 2 00:00:03,334 --> 00:00:06,184 來代表我們兩種類似「溫斯頓」的物件。 3 00:00:06,194 --> 00:00:09,034 然後藉由建構子,初始化它們。 4 00:00:09,234 --> 00:00:13,472 一個物件類型,不只需要與其屬性相關聯。 5 00:00:13,472 --> 00:00:15,866 它也可以與函數相關聯。 6 00:00:15,866 --> 00:00:20,286 想想世界上所有的物件類型,例如,我們人類。 7 00:00:20,287 --> 00:00:22,307 我們都有身高和年齡, 8 00:00:22,307 --> 00:00:26,287 也有可以做的事情,例如, 睡覺,吃飯,和編輯程式。 9 00:00:26,287 --> 00:00:30,679 我們需要能將這些函數與其物件類型相關聯。 10 00:00:30,679 --> 00:00:34,279 在此程式裡,我們將接續上次的編輯, 11 00:00:34,289 --> 00:00:39,439 我們這裡已有了「繪製溫斯頓」的函數, 用來呼叫兩種「溫斯頓」物件。 12 00:00:39,439 --> 00:00:44,916 如果能將它附帶於溫斯頓物件類型裡, 不就更簡便了? 13 00:00:45,046 --> 00:00:48,309 我們是可以這麼做,而且很容易。 14 00:00:48,569 --> 00:00:52,475 所以在建構子裡,我們要編寫「溫斯頓 」, 15 00:00:52,475 --> 00:00:55,575 大寫的「W 」以及「 點」、「原型」。 16 00:00:55,575 --> 00:00:59,232 這「原型」是一個新詞,你可能沒見過。 17 00:00:59,232 --> 00:01:06,071 「原型」是物件的屬性,可附帶函數。 18 00:01:06,071 --> 00:01:09,711 這將表示,每個物件的實例, 19 00:01:09,711 --> 00:01:12,531 也將附帶這些函數。 20 00:01:12,989 --> 00:01:17,632 所以我們可以用「點」、「原型」、「點」, 然後「函數的名稱」。 21 00:01:17,632 --> 00:01:24,306 所以我們用「繪製等於」,然後就可以 把「繪製溫斯頓」代碼, 22 00:01:24,306 --> 00:01:28,026 我們就把它放置到這裡面。 23 00:01:28,096 --> 00:01:32,811 好了。我們目前完成的是我們附帶了繪製函數 24 00:01:32,811 --> 00:01:34,938 於我們的溫斯頓原型。 25 00:01:34,938 --> 00:01:40,008 這意味著,我們應該能呼叫「繪製()」 於任一種類似「溫斯頓」的物件。 26 00:01:40,008 --> 00:01:45,031 因此,我們應該能呼叫「繪製()」 於「溫斯頓少年」或「溫斯頓成人」。 27 00:01:45,331 --> 00:01:49,549 當我們有了這樣能夠 呼叫物件的函數, 28 00:01:49,549 --> 00:01:54,653 我們稱它為「方法」。所以, 從此你會聽我說「方法」這名詞。 29 00:01:54,653 --> 00:01:58,092 我們就稱此為「繪製方法」。好了。 30 00:01:58,092 --> 00:02:03,863 現在我們來刪除這個,還有刪除這個, 然後看看我們是否能呼叫「繪製()」? 31 00:02:03,863 --> 00:02:06,769 「溫斯頓少年」、「點」、「繪製()」。 32 00:02:07,009 --> 00:02:08,287 好的,我們有個錯誤。 33 00:02:08,287 --> 00:02:13,577 這裡有明顯的錯誤。 它說,「溫斯頓物件沒被定義」。 34 00:02:13,577 --> 00:02:18,370 問題是,先前我們傳遞 這個參數到「繪製溫斯頓」裡, 35 00:02:18,370 --> 00:02:22,710 是一個溫斯頓物件,但現在我們傳遞不了。 36 00:02:22,710 --> 00:02:27,402 所以,我們可以改變這個來傳遞, 然後,讓我們看看, 37 00:02:27,402 --> 00:02:30,339 在這裡會通過甚麼? 我們得通過「溫斯頓少年」。 38 00:02:30,339 --> 00:02:33,901 好了,解決了,但那似乎滿滑稽的。 39 00:02:33,901 --> 00:02:38,081 我已經在物件本身呼叫繪製。 40 00:02:38,081 --> 00:02:41,775 我應該不必還得另外再傳遞到物件裡。 41 00:02:41,775 --> 00:02:43,945 這似乎是多餘的。 42 00:02:43,945 --> 00:02:45,665 沒錯,我們應該不必這麼做。 43 00:02:45,665 --> 00:02:48,245 所以,讓我們把這裡刪除。現在想想, 44 00:02:48,245 --> 00:02:51,544 我們如果在物件裡,我們能使用甚麼 45 00:02:51,544 --> 00:02:54,274 來取讀物件的屬性呢? 46 00:02:54,274 --> 00:02:58,054 你可以看看我們的建構子, 然後想起那個特殊的關鍵字,「此」, 47 00:02:58,054 --> 00:03:04,124 然後想到,啊,如果我們改變這個為「此」! 48 00:03:04,124 --> 00:03:07,923 讓我們將「溫斯頓物件」改寫為「此」。 49 00:03:08,383 --> 00:03:12,951 因為現在我們在這物件裡, 所以物件正在評估這函數, 50 00:03:12,951 --> 00:03:16,781 好讓「此」能用來引用當前的物件。 51 00:03:16,781 --> 00:03:20,361 這樣,我們只要用「此」,我們就能讀取, 52 00:03:20,361 --> 00:03:23,041 當前物件的所有屬性。 53 00:03:23,041 --> 00:03:26,520 這是完全有效的,看到了嗎?是不是很酷? 54 00:03:26,520 --> 00:03:31,547 我們現在可以用「溫斯頓成人」、 「點」、「繪製()」。 55 00:03:31,907 --> 00:03:35,291 成功!它將能讀取「溫斯頓成人」的屬性, 56 00:03:35,291 --> 00:03:38,021 因為那是被呼叫的物件。 57 00:03:38,021 --> 00:03:41,022 所以,很酷的是,這個「此」關鍵字。 58 00:03:41,022 --> 00:03:44,292 即使,在說時會令人有點混淆。 59 00:03:45,532 --> 00:03:49,258 好了。這還滿有趣的。 接下來,我們再添加一個方法。 60 00:03:49,258 --> 00:03:51,908 那麼,溫斯頓還會做什麼? 61 00:03:51,908 --> 00:03:56,238 也許他會說話。所以我們來製作一個 「溫斯頓點原型點講話」。 62 00:03:56,238 --> 00:04:00,688 這樣我們就可附帶許多的方法於原型裡。 63 00:04:00,858 --> 00:04:05,241 所以我們來說,「我是溫斯頓!」 64 00:04:05,241 --> 00:04:12,081 然後,我們再用「此」、「點X+ 20」, 和有「此」、「點Y + 150」。 65 00:04:12,751 --> 00:04:15,954 然後,你知道的,什麼都不會發生。 66 00:04:15,954 --> 00:04:19,534 那是因為我還沒實際的呼叫那個函數。 67 00:04:19,534 --> 00:04:24,048 我們讓這少年˙講話。 「溫斯頓少年點講話()」。青少年老愛說話。 68 00:04:24,048 --> 00:04:30,299 好的,「我是溫斯頓」。成功了! 然後用「溫斯頓成人點講話()」。 69 00:04:30,299 --> 00:04:31,928 成功了! 70 00:04:31,928 --> 00:04:36,438 現在我們的溫斯頓物件類型,有了它的屬性: 71 00:04:36,438 --> 00:04:41,496 暱稱、年齡、X、Y; 而且它有了功能:行為、方法; 72 00:04:41,496 --> 00:04:44,246 行為的不同取決於其屬性。 73 00:04:44,246 --> 00:04:48,146 我們能創建許多個我們想要的溫斯頓實例, 74 00:04:48,146 --> 00:04:50,649 然後以其中一種方法就能呼叫它。 75 00:04:50,649 --> 00:04:52,873 這很酷,是吧?