《JavaScript語言精粹》學習筆記二

Wrightlt發表於2018-03-27

第三章 物件

  • Js包含一種原型鏈的特性,允許物件繼承另一個物件的屬性。正確的使用它能減少物件初始化時消耗的時間和記憶體。
檢索
  • 檢索物件裡包含的值時,可以採用在[]字尾中括住一個字串表示式的方式。如果字串表示式是一個字串字面量,且它是一個合法的js識別符號而且不是保留字,那麼也可以用 . 表示法代替。優先使用 . 表示法,因為它更緊湊,且可讀性更好。
  • || 符號可以用於填充物件屬性的預設值: let status = flight.status || 'unknown'
引用
  • 物件通過引用來傳遞。它們永遠不會被複制:
var stooge = {
    "first-name": "Jerome",
    "last-name": "Howard",
  };
  var x = stooge;
  x.nickname = 'curly';
  var nick = stooge.nickName;
  // 因為 x 和 nick指向同一個物件的引用,所以nick為 'curly'。
  
  var a = {}, b = {}, c ={};
  // a, b, c都引用一個不同的空物件
  
  a = b = c = {}
  // a, b, c 都引用同一個空物件
複製程式碼
原型
  • 原型連線只有在檢索值的時候才會被用到。
列舉
  • 使用 for in 遍歷物件時,物件的屬性名出現的順序是不確定的,如果想要確保屬性以特定的順序出現,最好的辦法就是避免使用 for in語句,建立一個陣列,在其中以你需要的順序包含屬性名,並且使用for迴圈對該陣列進行遍歷。
刪除
  • delete運算子可以用來刪除物件的屬性。如果物件包含該屬性,那麼該屬性就會被移除,它不會觸及原型鏈中的任何物件。
  • 刪除物件的屬性可能會讓來自原型鏈中的屬性透現出來:
  another_stooge.nickName // 'Moe'

  // 刪除 another_stooge 的 nickName 屬性,從而暴露出原型的 nickName 屬性。
  delete another_stooge.nickName;
  
  another_stooge.nickName // 'Curly' another_stooge所繼承的物件的 nickName 屬性值為 'Curly'
複製程式碼
減少全域性變數汙染
  • js可以很隨意地定義全域性變數來容納你的應用的資源。遺憾的是,全域性變數削弱了程式的靈活性,應該避免使用。
  • 最小化使用全域性變數的方法之一是你的應用只建立一個唯一的全域性變數:
 var TETS = {};
複製程式碼

該變數此時變成了你的應用的容器:

  TEST.stooge = {
      'first-name': 'Joe',
      'last-name': 'Howard'
  }
  TEST.flight = {
      airline: 'Oceanic',
      number: 665
  }
複製程式碼
  • 只要把全域性性的資源都容納入一個名稱空間下,你的程式與其他應用程式、元件或者類庫之間發生衝突的可能性就會顯著降低。你的程式也會變得更容易閱讀,因為很明顯,TEST.stooge指向的是頂層結構。

  • 使用閉包來進行資訊隱藏是另一種有效減少全域性汙染的方法。

相關文章