JavaScript - 物件建構子
Hello, 有志青年程序師!今天,我們將要深入探索令人著迷的JavaScript物件建構子的世界。作為你們親切友善的計算機科學老師,我興奮地將引導你們走過這段旅程。所以,戴上你們的虛擬安全帽,讓我們開始建造一些物件吧!
物件建構子
想像一下你經營一家神奇的寵物店。你有很多不同的動物,每個動物都有自己的一套特徵。我們如果能為我們的動物創造一個藍圖,而不是分別寫出每個動物,那該有多好。這正是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}的能力!`);
};
}
現在,讓我們分解這個建構子:
- 我們定義了一個名為
MagicalPet
的函數,帶有名字、種類和特殊能力的參數。 - 在函數內部,我們使用
this
來將這些參數分配為物件的屬性。 - 我們還定義了一個名為
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