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, 一個網站開發者。
有任何疑問或是想勘誤的話歡迎聯繫。

0會員
11內容數
留言0
查看全部
發表第一個留言支持創作者!
HCY 71的沙龍 的其他內容
從今天開始往後的的內容會有許多的「註解」,程式不會執行被註解的內容,註解只是方便開發者辨識。JS內的註解主要有兩種。單行註解是在程式碼前方加上//,可以透過快捷鍵cmd(ctrl) + / 完成。多行註解則是用/* 及 */前後包夾要註解的內容。 轉換環境 從上個單元的經驗,有些人可能會發現
歡迎來到「10日 JavaScript」,有鑑於自己先前學習JavaScript的流程過於破碎且凌亂,特別整理了這份文章,包含了基本語法、資料型態、常用函數及JavaScript實作等。希望能幫助到一些需要用到、想要了解JavaScript的人,讓大家不必再走太崎嶇的路。內容會分成10篇,一步步
從今天開始往後的的內容會有許多的「註解」,程式不會執行被註解的內容,註解只是方便開發者辨識。JS內的註解主要有兩種。單行註解是在程式碼前方加上//,可以透過快捷鍵cmd(ctrl) + / 完成。多行註解則是用/* 及 */前後包夾要註解的內容。 轉換環境 從上個單元的經驗,有些人可能會發現
歡迎來到「10日 JavaScript」,有鑑於自己先前學習JavaScript的流程過於破碎且凌亂,特別整理了這份文章,包含了基本語法、資料型態、常用函數及JavaScript實作等。希望能幫助到一些需要用到、想要了解JavaScript的人,讓大家不必再走太崎嶇的路。內容會分成10篇,一步步
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
一切從"物件(Object)"開始 1.建立新物件 2.編輯物件內容 3.在物件中新增區塊
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。