Day03 JavaScript Object(物件)

更新 發佈閱讀 7 分鐘


今天我們會繼續用CodePen

為何需要Object(物件)

在開始介紹object之前,我們先來討論object為何需要存在。

想像我們有一筆關於網站使用者的資料,裡面包含使用者名稱、年紀,還有sayHelloToUser()這個function。

我們可以逐個定義、宣告這些資料。

raw-image

上面寫的程式完全是可運行的,但很明顯不太好管理。這些變數除了相似的名字,在程式上他們毫無關聯。假設有個誰在中間又多寫了幾行,或是不小心弄亂了順序,這些程式碼會變得更混亂、更難處理。就是電腦能夠理解沒錯,但人容易看不懂,這通常都是個大問題。

所以,為了讓程式碼更容易被人看懂,讓你的合作對象不抓狂,object(物件)出現了。object基本上是一種資料的容器,裡面可以裝非常多不同種類的資料,把分散的整理到容器裡面就容易管理多了,類似居家收納的概念。

宣告Object

Property(屬性)

object必須由{}括起來,或是換句話說,我們能透過{}來宣告JavaScript object。但要注意,雖然都有{},object跟function的樣子很不一樣。

raw-image

name, age在object裡,被稱為object的property(屬性)。而:後的則是property的value(值),並且兩個property之間以,連接。


觀察object可以看見它的架構是:

let object = {}


(順帶一提,這是function的架構:)

function 名稱() {}

以上面的例子來說,object的一個好處就是,我們能很清楚的知道這些屬性都跟user有關,不需要更多人為的判斷了。

Method

另外,object的屬性可以是任意的,可以是booleannumberstring,也可以是function

object內,由property(屬性): value(值)組成,不同的property由,分隔。

object內,由property(屬性): value(值)組成,不同的property由,分隔。


注意function的宣告跟之前的有稍微不同,省略了關鍵字function

object內的function被稱為method。本質上跟function是一樣的。


所以總結來說,object內會有兩種內容 — propertymethod


這裡的程式碼可能會開始讓人覺得混亂,好多不同的{}

raw-image

只要特別注意,最外層的{}代表這是一個object,而sayHello的{}則是function的一部分。

存取Object Property/Method

.存取

還記得我們之前做過用document.title存取Google網站的標題嗎?

raw-image

.就是用來存取object中property的關鍵。


以剛才的userobject為例:

raw-image


執行object內的method也是用這個關鍵字:

raw-image


[]存取

除了用.存取property之外,也常見用[]和property的名稱來存取。

raw-image


為什麼有這種多此一舉?

想像我們想存取的property是一個變數,我們可能會很直覺得把它放在.後面。

但這樣會變成在object裡搜尋'key'這個string,我們會失去使用變數的便利性。

這會回傳undefined,因為object裡根本沒有'key',這個property。

這會回傳undefined,因為object裡根本沒有'key',這個property。

要解決這個問題,我們就必須用[]來存取object裡的內容。

raw-image


相信大家能慢慢理解為何object是很實用的存在了。當user的資料跟有關的指令都被包含在userobject內,我們可以更容易的管理、理解之前自己或別人寫過的code。比起散亂在別的程式碼中,這些跟user有關的內容被裝進object容器整理了。

Object內的Object

例如我們想紀錄使用者三餐,我們可能也會需要object能統一管理的方便性,宣告成object。

這時候就出現了object裡面還有另一個object的情況。其實也不難理解,你想像無印良品店裡展示的收納盒裡面裝著另一個小盒子。

raw-image

如此一來可以很方便地用meals這個object管理三餐,也能很看到使用者真的是吃了不少吐司。

最後可以透過連續使用.[]一層又一層地找到資料:

這兩行指令基本上是一樣的。

這兩行指令基本上是一樣的。

動手嘗試

透過瀏覽器內建的document這個object,我們可以監聽畫面上的event(事件),像是滑鼠點擊、按下鍵盤等。

我們要存取的function(或是正確來說是method)叫做addEventListener()。它可以為畫面加上事件的監聽。在document後面加上.來存取addEventListener()

raw-image

他需要的參數有兩個,第一個是事件名稱,第二個是事件發生時要執行的function。

我們可以嘗試監聽click(滑鼠點擊)事件,並且執行簡單的alert。

raw-image

注意第二個參數,afterClicked後面沒有(),因為我們沒有要立刻呼叫這個function。只是給addEventListener()一個參考,讓他知道事件發生後要做什麼。

正如同之前在function單元提到的,我們只給它螺絲起子,它有需要的時候會用,不是在它面前開始用螺絲起子。

執行後,點擊畫面中右邊預覽處,就可以看見成功監聽了click event,跳出alert。

執行後,點擊畫面中右邊預覽處,就可以看見成功監聽了click event,跳出alert。

小結

今天我們認識了object作為內建的資料容器,以{}宣告,以.[]存取,並且也使用了瀏覽器內建的document object監聽畫面上的事件。


明天我們會討論JavaScript另一個重要的資料容器,array(陣列)


Resource

今日Codepen

連結

Credits

關於我

我是Erkin, 一個網站開發者。
有任何疑問或是想勘誤的話歡迎聯繫。

留言
avatar-img
留言分享你的想法!
avatar-img
HCY 71的沙龍
0會員
11內容數
HCY 71的沙龍的其他內容
2024/11/04
這個單元裡我們會繼續用Codepen來製作簡單的To-Do List app。裡面會使用到基本的HTML和CSS來製作UI,別擔心會非常簡單。示範的Codpen同樣會附在今天的內容裡面,如果想看成果的話可以直接點前往。 基礎架構 為了完成這個web app,我們必須先理解HTML、CSS之間
Thumbnail
2024/11/04
這個單元裡我們會繼續用Codepen來製作簡單的To-Do List app。裡面會使用到基本的HTML和CSS來製作UI,別擔心會非常簡單。示範的Codpen同樣會附在今天的內容裡面,如果想看成果的話可以直接點前往。 基礎架構 為了完成這個web app,我們必須先理解HTML、CSS之間
Thumbnail
2024/11/04
在JavaScript裡面,Async和Await應該是搜尋熱度最高的關鍵字了,因為他們相對複雜。我們一步步討論這件事的歷史 — 它們為什麼出現,解決了什麼問題。 JavaScript的Synchronous(同步) 首先我們必須了解JavaScript執行的基本原則 — synchrono
Thumbnail
2024/11/04
在JavaScript裡面,Async和Await應該是搜尋熱度最高的關鍵字了,因為他們相對複雜。我們一步步討論這件事的歷史 — 它們為什麼出現,解決了什麼問題。 JavaScript的Synchronous(同步) 首先我們必須了解JavaScript執行的基本原則 — synchrono
Thumbnail
2024/11/04
今天要談的內容也是JavaScript很核心的部分,即使學完了先前的章節,馬上去看別人寫的JavaScript程式碼還是會看不懂,主要是因為JS開發者會採用各種簡化和替代的寫法,我們一一討論。 Anonymous(匿名) Function 首先我們要討論的是Anonymous(匿名) Fun
Thumbnail
2024/11/04
今天要談的內容也是JavaScript很核心的部分,即使學完了先前的章節,馬上去看別人寫的JavaScript程式碼還是會看不懂,主要是因為JS開發者會採用各種簡化和替代的寫法,我們一一討論。 Anonymous(匿名) Function 首先我們要討論的是Anonymous(匿名) Fun
Thumbnail
看更多
你可能也想看
Thumbnail
Sunkronizo 的 Playful Heart 是一款帶著明亮果香與柔和木質調的甜感香水,特別適合星期四使用。前調活潑、尾韻沉靜,陪你從忙碌過渡到週末的輕鬆心情。適合喜歡果香、花果香調的女性,也很適合作為溫暖又有個性的送禮選擇。可於官網、Pinkoi 選購,11 月底起於臺中國家歌劇院寄售。
Thumbnail
Sunkronizo 的 Playful Heart 是一款帶著明亮果香與柔和木質調的甜感香水,特別適合星期四使用。前調活潑、尾韻沉靜,陪你從忙碌過渡到週末的輕鬆心情。適合喜歡果香、花果香調的女性,也很適合作為溫暖又有個性的送禮選擇。可於官網、Pinkoi 選購,11 月底起於臺中國家歌劇院寄售。
Thumbnail
根據美國電影協會(MPA)主辦的「串流服務如何推動臺灣創意經濟」論壇內容,深入探討串流平臺對臺灣影視產業的影響、數據分析、政府政策建議、內容國際化策略,以及臺灣與「韓流」的差距。文章提出 awwrated 在串流生態系中的潛在角色,強調數據、策略與自信是臺灣影視產業發展的關鍵。
Thumbnail
根據美國電影協會(MPA)主辦的「串流服務如何推動臺灣創意經濟」論壇內容,深入探討串流平臺對臺灣影視產業的影響、數據分析、政府政策建議、內容國際化策略,以及臺灣與「韓流」的差距。文章提出 awwrated 在串流生態系中的潛在角色,強調數據、策略與自信是臺灣影視產業發展的關鍵。
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News