2025-02-25-prototype是什麼?為什麼要看
2025-02-25-prototype是什麼?為什麼要看
🔍 prototype
是什麼?為什麼要看?
在 JavaScript 中,所有物件都有原型(prototype)。這個「原型」是物件的隱藏屬性,用來繼承其他物件的屬性與方法。
簡單來說:
prototype 是 JavaScript 的繼承機制,是「物件的爸爸」或「模板」。
🧠 為什麼看 [[Prototype]]
有用?
✅ 1. 知道物件的本質與繼承來源
範例:
1 | const arr = [1, 2, 3] |
在 Chrome DevTools 點開這個陣列 → 可以看到:
1 | [[Prototype]]: Array(0) |
你會發現:
1 | arr.map() |
這些方法不是你自己寫的,是「繼承自 Array.prototype」!
✅ 2. 除錯時辨別是什麼類型的物件
有時候你拿到一個 object
,但你不確定它是:
- 真正的 plain object?
- 還是從某個 class new 出來的?
- 或是 JSON 格式物件?
你可以:
1 | console.log(Object.getPrototypeOf(obj)) |
或直接在 Chrome 點開 [[Prototype]]
,就能看出來是:
Object
Array
Date
- 自訂 class(例如:
WeatherData
)
✅ 3. 了解自訂物件或第三方物件的能力
如果你用了第三方函式庫(例如 Vue、Axios),
你可以:
1 | console.dir(instance) |
或:
1 | console.log(Object.getPrototypeOf(instance)) |
然後你會看到:
- 這個物件有哪些方法
- 有沒有內建的特殊函數(如
.on()
,.emit()
)
💡 初學者常見誤區
錯誤觀念 | 正確說法 |
---|---|
object 裡看到的方法是「自己寫的」 |
其實是從 prototype 繼承來的 |
array 可以用 .map() 是因為陣列特別 |
是因為繼承了 Array.prototype |
🧪 小測驗題:你知道嗎?
1 | const obj = {} |
答:這是從 Object.prototype.toString
繼承來的。
✅ 結論:高階除錯、理解繼承、搞懂底層運作
所以,看 [[Prototype]]
對高階開發者來說是非常重要的技巧,可以幫助你:
- 除錯與分析物件
- 理解資料來源與方法繼承
- 寫出更有結構的程式碼