到底什麼是建構函式? 我不知道


Posted by Rich on 2021-08-27

先記錄一些搜尋到的資料,但這篇可能不會有答案。希望未來的我可以教教我。
鐵人賽:JavaScript 建構式
透過上面的文章,可以得知。

  • 為什麼要有建構式?
    • 想套用已經寫好的物件。不然每次都要重寫很沒效率。直接指派又會有記憶體位置的問題。建構式可以解決以上問題。

instance 是什麼? 什麼誰是誰的 instance。好像是從某個物件 new 出來的都可以這樣說?

經典必看
老師文章還不推爆

這次又看一遍,覺得了解 class 在幹嘛好像有點重要了。畢竟 JavaSrcipt 的 prototype 就是在模仿它的功能,所以不了解 class 的話就不知道他為什麼這樣做了。
所以 class 在幹嘛? 這篇也有稍微講到。其實就有點像動物的分類那樣。class 就像靈長類,下面的 instances 就是人類、猴子、猩猩這種感覺。然後因為我們類似,所以有資訊是通用的。像是我們都是雜食性(亂舉例),或我們都有 2 個眼睛一個鼻子一個嘴巴之類的。這種通用的資訊就可以記錄在 class 裡面,所以我們從 class 裡面 new 出來後,就可以直接繼承這些資訊。
但一些比較特別的資訊,例如說人類是是兩隻腳走路的,那這就被記錄在 instance 裡面。

我來想一個線上 RPG 的版本。class 就像是楓之谷或魔獸世界裡面的職業,假如你跟小明都一樣選戰士的話,那就會有一樣的技能。為什麼?因為你們的技能都是從「戰士」這個職業繼承而來的,而戰士這個職業就可以說是一個 class。雖然這樣,你跟小明選的角色還是不一樣。為什麼?如果大家角色都一樣沒有人要玩了。最基本,你們角色的 ID 就一定不一樣了。甚至可能等級不一樣、裝備不一樣、解過的任務不一樣。這些資訊就會記在 instance 上,也就是你的角色上。所以可以想像,每次有人新創了一隻戰士,就是從戰士這個 class 裡面 new 一個新角色出來。這個新角色就是 instance。它有自己的名子、自己的裝備。所以你跟小明的角色是完全不一樣的東西,但你們有一些共同點。不一樣的地方由 instance 紀錄,一樣的地方由 class 紀錄。
這是我目前的理解。-- 2021/8/27

這兩篇當初都有看過,但現在看才發覺原來沒真的懂。尤其經典那篇當初是有看沒有懂啊。每個字都看得懂,合起來我就不知道想表達什麼意思。真的要有那個上下文的脈絡,才能理解裡面的東西。但看懂之後受益極大,感恩的心。


#javascript







Related Posts

C# class, object, method, constructors, getter, setter, static

C# class, object, method, constructors, getter, setter, static

D2R Enigma Armor: A Synthesis of Power and Strategy

D2R Enigma Armor: A Synthesis of Power and Strategy

OOP - 7 關於封裝

OOP - 7 關於封裝


Comments