iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 23
0
自我挑戰組

寇丁人妻的前端書蟲日誌系列 第 23

Day23:JavaScript 設計模式 優良部份 Chapter03 物件 筆記精要

  • 分享至 

  • xImage
  •  
  • 物件是特性的容器。
  • 特性具有名對值。
  • 特性名稱可以為任何字串,或是 JavaScropt 允許的值,undefined 除外。
  • 物件內能包含其他物件,可為巢狀結構。
  • JavaScropt 包含原型鍊,允許物件繼承其他物件的特性。

物件實字

  • 物件實字是以一組大括號圍起的零或多個名值對。
  • 物件可以出現在任何運算式。

擷取

  • [] 圍起的字串運算式,即可從物件中擷取值。
  • 也可改為 . 註記。
  • 如果擷取不存在的成員,則會產生undefined
var stooge = {
    "first-name": 'Joe',
    'last-name': 'Howard'
};
stooge['middle-name']; //undefined
  • || 運算子能用於填入預設值。
  • 若從 undefined 中擷取值,會丟出 TypeError。

更新

  • 物件的值可以透過指派而更新,如果原本已有就會取代該特性值。
  • 如果物件中還沒有特性名稱,就會新增一個特性。
stooge['first-name'] = 'Jerome';
stooge['middle-name'] = 'Lester';

參考

  • 物件透過參考傳遞,物件不會被複製。
var a = {}, b = {}, c = {};
// 各自參考不同物件
a = b = c = {};
// 參考同一空物件

原型

  • 每個物件都聯繫到一個 prototype 物件,由此繼承特性。
  • 變更物件,原型並不會受到改變。
  • 原型聯繫只在於擷取值。
  • 如果物件缺少特性名稱,JavaScript 會嘗試從原型取值,層層向上找,直至Object.prototype
  • 原型關係為動態,在原型中加入新特性,基於此原型的新的物件也會有新特性。

反映

  • 使用 typeof 可以幫助判斷特性型別。
  • 原型鏈的特性皆可產生值。
  • hasOwnProperty 可檢查物件所擁有的特性(部會檢索原型鏈)

列舉

  • 可以用 for-in 迴圈處理物件的特性,也可搭配 hasOwnProperty 過濾不需要的值。
  • 物件的特性名稱沒有序列,若需要序列化的資料,請用陣列。
var name;
for (name in another_stooge) {
    if (typeof another_stooge[name] !== 'function'){
        document.writeln(name + ': ' + another_stooge[name]);
    }
}

刪除

  • delete 可從物件移除特性,不會影響物件聯繫的其他物件。
  • 從物件裡移除特性,能揭露來自原型聯繫的特性。
another_stooge.nickname; //'Moe'
delete another_stooge.nickname;
another_stooge.nickname; //'Curly'

減少全域變數

  • JavaScript 可以輕易定義且保存所有全域變數。
  • 替程式建立唯一一個全域變數。
var MYAPP = {};

MYAPP.stooge = {
    "first-name": "Joe",
    "last-name": "James",
};
MYAPP.flight = {
    airline: "Oceanic"..
    ..
}

資料來源:《JavaScript 優良部份》 Douglas Crockford 著 歐萊禮
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.


上一篇
Day22:YDKJS 第五次讀書會(下)
下一篇
Day24:JavaScript 設計模式 優良部份 Chapter04 函式 筆記精要
系列文
寇丁人妻的前端書蟲日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言