5. 認識物件
刪除物件的屬性 (key):
delete.myObj.myKey
// myObj 沒有 myKey 這個屬性了, 試圖存取顯示 undefined
// 成功刪除, delete 會回傳 true
// 原本就沒有該屬性, delete 也會回傳 true
變數如何保存一個物件?
變數可以保存一個值。 但對物件,變數保存的不是物件的內容,而是物件的「地址」。 「基本變數」代表的是一個值, 「物件變數」代表的是取得物件的方式(位置)。
使用 .
, js 會依據 .
之前變數所存的位置,找到物件,
然後取得該屬性的值。
let car = new Car();
// 記憶體出現一個新的 Car 物件,
// 變數 car 指向這個新 Car 物件的位置。
car.color 使用 car 變數所指向的物件,找到 color 屬性
所以,和變數不同,如果傳「物件變數」給 funciton, 會改變原物件的值。
this
指定 function 為物件屬性,稱為「方法」。
方法中用 this
關鍵字可表示「該函式所在的物件」。
當執行一個 function 時,變數可能是
- 全域變數
- 區域變數
- 參數
但「方法」的變數是「自己物件的 key 值」時,
變數不屬於上述情況,它需要先指向物件才找得到屬性,
所以必須使用 this.key
讓 js 知道指向當前物件,而不是基本變數。
this 變數會被分配給方法的物件 (方法屬於物件,被物件使用)。
http://jsbin.com/dubudit/5/edit?js,console
但物件自己的屬性的值無法用 this 表示當前物件,會代表 window。
使用 new
建立物件,會將 this
指定為物件本身。
透過迭代來知道物件中有哪些屬性 fot in
fot( var item in obj)
// item 代表 obj 裡面的一個屬性 (key)
方括號表示法中可以"做運算",但最後值需是字串。
obj["key" + "s"]