[JavaScript] 常常聽到的實例 (Instance) 和類別 (Class) 到底是什麼?:你與我與人類

itsems
itsems_frontend
Published in
Nov 12, 2020
Photo by Seth Weisfeld on Unsplash
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 指向了新創建的物件,而印出了不一樣的內容。

這篇的篇幅有一點短,但是在稍微熟悉這些名詞之後,再整理下一篇原型與原型鍊的筆記。

--

--

itsems
itsems_frontend

Stay Close to Anything that Makes You Glad You are Alive.