1
00:00:01,184 --> 00:00:03,425
現在你們已學習到有關
Javascript的基礎知識
2
00:00:03,425 --> 00:00:06,180
我要教你們一個很酷的方式
來使用JavaScript
3
00:00:06,180 --> 00:00:09,555
那就是"物件導向程式設計"
4
00:00:09,555 --> 00:00:12,156
首先我們要理解一下
它為什麼很實用
5
00:00:12,298 --> 00:00:15,858
所以我撰寫了一個程式
讓它變得更”物件導向”後
6
00:00:15,858 --> 00:00:17,218
就會變得更好
7
00:00:17,247 --> 00:00:19,967
這真是一個很酷的程式
8
00:00:19,967 --> 00:00:24,007
在頂部我有兩個變數
裡面儲存了簡單的物件實體語法
9
00:00:24,363 --> 00:00:28,244
物件實體語法是以前
我們所學到的其中一種物件
10
00:00:28,535 --> 00:00:30,634
即是我們構建了兩個大括號
11
00:00:30,634 --> 00:00:33,455
然後把這些屬性名稱
及數值全部放進去
12
00:00:33,762 --> 00:00:37,292
因此我們有兩個物件實體語法變數
13
00:00:37,292 --> 00:00:40,776
在這裡我們有這個函數
drawWinston,它需要一個引數
14
00:00:40,776 --> 00:00:45,115
然後再繪畫出引數
15
00:00:45,115 --> 00:00:47,847
並根據物件的 x及 y 屬性繪畫圖像
16
00:00:47,847 --> 00:00:52,900
然後根據那個物件的暱稱
及年齡屬性添加字幕
17
00:00:52,900 --> 00:00:55,538
最後在底部我們呼叫 drawWinston
18
00:00:55,538 --> 00:00:57,289
到青少年及成人中
19
00:00:57,331 --> 00:01:00,010
這會使它顯示出來
20
00:01:00,862 --> 00:01:05,501
很贊哦。假如我們到這裡
看看這些物件實體語法
21
00:01:05,617 --> 00:01:10,606
就會注意到它們的外觀其實真的很相似
22
00:01:11,188 --> 00:01:15,608
都具有相同系列的屬性
且兩者也可以使用相同的
23
00:01:15,608 --> 00:01:17,493
drawWinston函數
24
00:01:17,891 --> 00:01:21,630
其實如果你們想像一下
他們真的都在描述
25
00:01:21,630 --> 00:01:23,910
某類型的Winston,對不對?
26
00:01:24,240 --> 00:01:28,840
我們可以這樣想 或者在世上
存在著這抽象類型的Winston
27
00:01:28,840 --> 00:01:32,771
而每一 Winston 也具有
相同系列的屬性,如暱稱
28
00:01:32,771 --> 00:01:36,991
年齡、x 與 y
29
00:01:36,991 --> 00:01:42,090
我們剛在這裡完成的是
建立了兩個 Winston實例
30
00:01:42,090 --> 00:01:44,821
來描述特定的 Winston
31
00:01:45,001 --> 00:01:48,350
因此這是青少年Winston
而這是成人Winston
32
00:01:48,350 --> 00:01:52,892
但是,他們兩者真的十分相似
33
00:01:52,892 --> 00:01:55,002
且很多跟他們有關的事也相近
34
00:01:55,002 --> 00:01:57,712
如果你們仔細想想世間上
也有很多不同的運作方式
35
00:01:57,712 --> 00:02:01,341
我們有這些抽象數據類型
如人類及群眾
36
00:02:01,341 --> 00:02:03,714
我們都只是特定的實例
37
00:02:03,714 --> 00:02:05,712
擁有我們自己小小的屬性
38
00:02:06,041 --> 00:02:10,362
現在我們實際上可以使用
物件導向技術 Javascript
39
00:02:10,362 --> 00:02:17,463
使這些 Winston 變數成為
Winston 物件的正式實例
40
00:02:17,921 --> 00:02:21,963
使他們知道正在共享這些共同的東西
41
00:02:21,963 --> 00:02:25,091
要這樣做的話我們需要做的
第一件事就是實際地描述
42
00:02:25,091 --> 00:02:30,372
這個抽象數據類型 Winston
因此我們要作出一個變數
43
00:02:30,372 --> 00:02:35,111
你們要把數據類型儲存在變數
Winston 變數,而我們用大寫W
44
00:02:35,220 --> 00:02:38,630
因為我們的物件類型
通常由大寫字母開始
45
00:02:38,630 --> 00:02:41,810
我們把它設置為函數
46
00:02:41,810 --> 00:02:46,950
而這個函數是一個特定函數
我們把它叫做 "建構子函數"
47
00:02:46,950 --> 00:02:49,471
因為我們每一次要建立
全新的 Winston 實例時
48
00:02:49,471 --> 00:02:52,110
這就是被呼叫的東西
49
00:02:52,110 --> 00:02:55,369
當我們要建立青少年 Winston
就會呼叫這個函數
50
00:02:55,369 --> 00:02:57,989
或要建立成年人 Winston
就會呼叫這個函數
51
00:02:57,997 --> 00:03:03,037
這意味著這個函數要了解
任何需要知道的引數
52
00:03:03,037 --> 00:03:06,267
以作出完整的 Winston
53
00:03:06,457 --> 00:03:10,433
在這種情況下,它需要知道
暱稱、年齡、x 與 y
54
00:03:10,718 --> 00:03:15,249
現在,當我們收到那些引數後
就需要做一些事情
55
00:03:15,249 --> 00:03:20,919
我們需要把這些資料
實際地連接到 Winston 物件
56
00:03:21,389 --> 00:03:26,660
因此我們要使用全新的特別關鍵字"this"
57
00:03:26,660 --> 00:03:29,018
而"this"是指目前的物件實例
58
00:03:29,018 --> 00:03:31,800
我們會說 this.nickname
而它會說”好吧”
59
00:03:31,800 --> 00:03:34,169
而這個物件的暱稱屬性相等於
60
00:03:34,169 --> 00:03:38,030
任何被傳到建構子函數的,好囉?
61
00:03:38,451 --> 00:03:42,381
this.age 相等於傳入的年齡
62
00:03:42,449 --> 00:03:44,138
而 this.x 相等於傳入的 x
63
00:03:44,138 --> 00:03:47,328
而 this.y 相等於傳入的 y
64
00:03:47,466 --> 00:03:52,537
現在我們有這個名為
Winston 的抽象數據類型
65
00:03:52,838 --> 00:03:56,488
而它帶有建構子函數
我們可以使用它來建立全新的Winston
66
00:03:56,488 --> 00:03:58,778
讓我們嘗試使用它吧!
67
00:03:59,476 --> 00:04:03,236
我們要重新建立 WinstonTeen
68
00:04:03,236 --> 00:04:05,314
但是這一次我們用WinstonTeen等於
69
00:04:05,314 --> 00:04:10,365
這裡不用大括號 我們會說
"等於全新的 Winston"
70
00:04:10,607 --> 00:04:14,107
我們會說 "我們正在嘗試
建立全新的 Winston 實例"
71
00:04:14,107 --> 00:04:16,346
然後我們要傳入需要的資料
72
00:04:16,346 --> 00:04:21,478
"Winsteen",15, 20, 50
好囉!
73
00:04:22,246 --> 00:04:26,306
然後我們刪除舊資料
因為已不再需要它們了
74
00:04:26,306 --> 00:04:30,097
好了吧? 現在我們建立了
全新的Winsteen
75
00:04:31,207 --> 00:04:35,806
我們會說
winstonAdult = new Winston()
76
00:04:35,960 --> 00:04:39,502
當然他的名字是"Mr. Winst-a-lot"
聽起來甜美可人的名字
77
00:04:39,502 --> 00:04:45,342
他30歲,在 229 及50
好,然後我們就可以刪除
78
00:04:45,342 --> 00:04:49,923
這個物件實體語法
很好! 我們的代碼仍然正常運作
79
00:04:50,712 --> 00:04:53,651
我們在這裡所做的就是
我們說好吧 就有這個
80
00:04:53,651 --> 00:04:57,161
Winston 抽象類型數據
81
00:04:57,852 --> 00:05:03,073
而我們能建立全新的 Winston 實例
82
00:05:03,073 --> 00:05:05,161
且擁有這些特定的屬性
83
00:05:05,161 --> 00:05:08,661
我們把這些屬性儲存在內
84
00:05:08,661 --> 00:05:12,284
而記憶是非常重要的
因些你們知道內裡
85
00:05:12,284 --> 00:05:14,154
有這個
this.nickname, this.age
86
00:05:14,325 --> 00:05:19,642
如果意外地丟失這個年齡
你們注意到它會說 "未定義"
87
00:05:20,249 --> 00:05:22,958
因為在這裡 drawWinston 函數
88
00:05:22,958 --> 00:05:28,321
期待著任何傳入的物件
都帶有年齡屬性
89
00:05:28,321 --> 00:05:30,803
如果我們沒有 this.age
90
00:05:30,803 --> 00:05:34,372
那麼它也沒有年齡屬性
我們傳入了建構子函數
91
00:05:34,372 --> 00:05:37,231
但是並沒有用它做任何事情
92
00:05:37,231 --> 00:05:39,452
我們必須使用 "this"關鍵字
實際地連接到物件
93
00:05:39,621 --> 00:05:41,542
那我們就把它添加回去
94
00:05:41,542 --> 00:05:45,111
現在你們會想代碼已正常運作
95
00:05:45,111 --> 00:05:50,321
但是......我們只是完成了前面做過的事
96
00:05:50,457 --> 00:05:53,936
但這裡是一件很酷的事
我們所有的 Winstons
97
00:05:53,936 --> 00:05:56,086
經過相同的建構子函數
98
00:05:56,086 --> 00:05:59,656
如果我們想要進行更新
我們是真的可以修改它們的
99
00:05:59,656 --> 00:06:01,167
有關 Winston 的一些東西...
100
00:06:01,167 --> 00:06:04,217
所有的 Winstons
就在這裡,可能是年齡
101
00:06:04,217 --> 00:06:06,107
事實上我們想說 "歲數"
102
00:06:06,107 --> 00:06:09,838
我們只須放在這裡
現在所有 Winstons 說
103
00:06:09,838 --> 00:06:12,879
"15歲"、 "30歲" 對嗎?
104
00:06:12,879 --> 00:06:14,977
因此他們只取用獨特的部分
105
00:06:14,977 --> 00:06:17,417
他們也有共享的東西
106
00:06:17,417 --> 00:06:20,107
而物件導向程式設計最棒的地方
107
00:06:20,107 --> 00:06:22,107
就是在這世上有這類的物件
108
00:06:22,107 --> 00:06:26,108
你們能夠實際地建立這些物件的實例
109
00:06:26,108 --> 00:06:28,428
而還有跟他們相似的東西
110
00:06:28,428 --> 00:06:30,408
例如他們擁有相同的屬性
111
00:06:30,408 --> 00:06:32,409
且有不同的東西
112
00:06:32,409 --> 00:06:35,508
例如這個屬性事實上跟其他的屬性
帶有不同的數值,對不對?
113
00:06:35,508 --> 00:06:38,748
你們知道嘛,我們可以
使用相同的行為
114
00:06:38,748 --> 00:06:40,508
像呼叫相同的函數
115
00:06:40,508 --> 00:06:43,069
以類似的方式使用它們
116
00:06:43,069 --> 00:06:45,979
這是一些有關物件導向
程式設計很棒的東西
117
00:06:45,979 --> 00:06:48,548
而你們將會看到更多很棒的東西
118
00:06:48,548 --> 00:06:50,148
敬請繼續收看