[JavaScript] 常常聽到的實例 (Instance) 和類別 (Class) 到底是什麼?:你與我與人類
Outline:
+ 物件導向程式設計(OOP)
+ 類別、實例(實體)
+ 建構子(constructor)、函式建構式/建構函式(Function constructor)
注意:本篇不會提及 Javascript 的原型與原型鍊,目的在於前往理解原型之前,想先釐清各種專有名詞,全部一起看腦袋吃不消(年紀到了)
物件導向程式設計
物件導向程式設計 (Object-oriented programming, OOP),是一種程式設計方式,概念上是將軟體想像成由一群物件交互合作所組成,每個物件皆視為獨一無二的個體,扮演著不同的腳色,並各自具備接收訊息、處理資料、發送訊息給其他物件的能力。
這樣的設計方式使軟體更有彈性且易於理解與維護,也使它廣泛的被許多大型軟體工程所使用。
並 OOP 分為兩種類型:
- 基於「類別」(Class-based) 的物件導向
- 基於「原型」(Prototype-based) 的物件導向
Javascript 是一種基於原型 (Prototype-based) 的腳本語言,他不像是 C 或是 Java 這些物件導向語言具有類別 (Class) 可以使用,也沒有繼承的概念。
類別、實例(實體)
類別 Class:
用來描述擁有某種屬性、方法,是一種廣泛的概念。
ex: 人類是一種類別,擁有兩個眼睛,可以走路。
實例 Instance:
是一個實際建立的個體。
ex: 你、我、他,都有兩個眼睛,可以走路,可是我們都是不一樣的人。
建構式(Constructor)、函式建構式/建構函式(Function constructor)
被使用 new
來「建立 / 實例化(Instantiation)」實例的函式,就稱為建構式/建構子/函式建構。
以這張圖為例, who func 就是一個建構函式。
在建立實例的過程中, new
這個運算子幫我們做了幾件事情:
- 建立了新的記憶體空間與物件
- 將 this 指向新的物件
- 執行函式
- 回傳這個物件
舉例:
從結果可得知,函式執行了,並在印出名字和年紀之外,this 指向了新創建的物件,而印出了不一樣的內容。
這篇的篇幅有一點短,但是在稍微熟悉這些名詞之後,再整理下一篇原型與原型鍊的筆記。
內容若有任何錯誤,歡迎留言交流指教!🦦
ref:
你懂 JavaScript 嗎?#19 原型(Prototype)
Javascript繼承機制的設計思想
該來理解 JavaScript 的原型鍊了