JavaScript - 物件建構子

Hello, 有志青年程序師!今天,我們將要深入探索令人著迷的JavaScript物件建構子的世界。作為你們親切友善的計算機科學老師,我興奮地將引導你們走過這段旅程。所以,戴上你們的虛擬安全帽,讓我們開始建造一些物件吧!

JavaScript - Object Constructors

物件建構子

想像一下你經營一家神奇的寵物店。你有很多不同的動物,每個動物都有自己的一套特徵。我們如果能為我們的動物創造一個藍圖,而不是分別寫出每個動物,那該有多好。這正是JavaScript中的物件建構子所做的!

物件建構子就像是一家工廠,生產具有相似屬性和方法的物件。讓我們為我們的神奇寵物創造一個簡單的建構子:

function MagicalPet(name, species, specialPower) {
this.name = name;
this.species = species;
this.specialPower = specialPower;
this.introduce = function() {
console.log(`嗨,我是${this.name},一隻${this.species},擁有${this.specialPower}的能力!`);
};
}

現在,讓我們分解這個建構子:

  1. 我們定義了一個名為MagicalPet的函數,帶有名字、種類和特殊能力的參數。
  2. 在函數內部,我們使用this來將這些參數分配為物件的屬性。
  3. 我們還定義了一個名為introduce的方法,用來打印出一個問候。

要創造一個新的神奇寵物,我們使用new關鍵字:

let fluffy = new MagicalPet("Fluffy", "龍", "噴火");
fluffy.introduce(); // 輸出:嗨,我是Fluffy,一隻龍,擁有噴火的能力!

瞧!我們剛剛使用物件建構子創造了我們的第一個神奇寵物。這不是很令人興奮嗎?

為建構子添加屬性或方法

有時候,在我們創建完建構子後,我們可能會發現我們忘記添加了一個重要的屬性或方法。不用擔心!我們可以稍後使用原型(prototype)來添加它們。

讓我們為我們的MagicalPet添加一個age屬性和一個birthday方法:

MagicalPet.prototype.age = 0;
MagicalPet.prototype.birthday = function() {
this.age++;
console.log(`${this.name}現在${this.age}歲了!`);
};

現在,每個神奇寵物都會有一個年齡(從0開始),並且可以慶祝生日:

fluffy.birthday(); // 輸出:Fluffy現在1歲了!
fluffy.birthday(); // 輸出:Fluffy現在2歲了!

JavaScript 物件原型

你可能會想知道,"我們剛才使用的這個'原型'是什麼東西?" 好吧,把它想像成一個共享的背包,所有從同一個建構子創建的物件都會攜帶這個背包。我們放入背包中的任何東西,所有物件都能夠訪問。

當我們為原型添加屬性或方法時,我們實際上是把它們放入這個共享背包中。這比直接將它們添加到每個物件中更節省記憶體,特別是我們有很多物件時。

這裡有一個視覺表示:

MagicalPet 建構子
|
v
原型 (共享背包)
- age
- birthday()
|
v
個別的 MagicalPet 物件
- name
- species
- specialPower
- introduce()

JavaScript 內置物件建構子

JavaScript提供了一些內置的物件建構子,你會在編程冒險中經常使用它們。讓我們看看其中一些:

建構子 描述 範例
String() 創建字符串物件 let greeting = new String("Hello");
Number() 創建數字物件 let age = new Number(25);
Boolean() 創建布爾物件 let isAwesome = new Boolean(true);
Array() 創建數組物件 let fruits = new Array("apple", "banana", "cherry");
Object() 創建通用物件 let emptyObj = new Object();
Date() 創建日期物件 let today = new Date();

雖然這些建構子可用,但值得注意的是,對於字符串、數字和布爾值等原始類型,使用文字字面量通常更為常見且效率更高:

let greeting = "Hello";            // 推荐使用,而不是 new String("Hello")
let age = 25;                      // 推荐使用,而不是 new Number(25)
let isAwesome = true;              // 推荐使用,而不是 new Boolean(true)
let fruits = ["apple", "banana"];  // 推荐使用,而不是 new Array("apple", "banana")

然而,像Date()這樣的建構子通常按如下方式使用:

let birthday = new Date("1990-01-01");
console.log(birthday.getFullYear()); // 輸出:1990

好了,年輕的編程巫師們!我們已經穿越了JavaScript物件建構子的領域,添加了神奇的屬性和方法,探索了神秘的原型,甚至還瞥見了一些內置建構子。

記住,熟能生巧。試著創造你自己的建構子,也許是不同類型的魔法或神奇的生物。你越多地玩轉這些概念,它們就會變得越來越自然。

繼續編程,持續學習,最重要的是,繼續享受樂趣!在我們下一次課程之前,願你的代碼沒有錯誤,編譯時間迅速!

Credits: Image by storyset