ES6 對象的擴展

目錄 第四章 擴展對象的功能性對象類別對象字面量語法擴展屬性初始值的改寫對象方法的簡寫可計算屬性名新增方法Object.is()方法Object.assign()方法重複的對象字面量屬性自有屬性枚舉順序加強對象原型改變對象原型簡化原型訪問的super引用正式的方法定義函數

第四章 擴展對象的功能性ui

對象類別this

  • 普通(Ordinary)對象:具備JS對象全部默認內部行爲。
  • 特異(Exotic)對象:具備某些與默認行爲不符的內部行爲。
  • 標準(Standard)對象:ES6規範中定義的對象,如Array、Date等。
  • 內建(Built-in)對象:腳本開始執行時,存在於JS執行環境中的對象。

對象字面量語法擴展指針

屬性初始值的改寫code

當一個對象的屬性與本地變量同名時,沒必要再寫冒號和值,只須要寫屬性名。對象

function createPerson (name, age) {
  return {name, age};
}

對象方法的簡寫排序

對象中聲明方法,不須要冒號和function關鍵字。原型鏈

var person = {
  sayName () {
    console.log('name');
  },
};

可計算屬性名字符串

對象屬性能夠用變量表示。get

var prefix = 'my';
var person = {
  [prefix + 'number']: '123',       // 等同於 mynumber:'123'
};

新增方法

Object.is()方法

修正全等運算符中的兩處疑惑點:

  • +0 === -0
  • NaN !== NaN

Object.assign()方法

實現了相似於mixin的方法。

function mixin (source, supplier) {
  Object.keys(supplier).forEach(function (key) {
    source[key] = supplier[key];
  });
  return source;
}

Object.assign()的好處在於,能夠複製訪問器屬性(get和set)。

重複的對象字面量屬性

代碼不檢查重複屬性,對於每一組重複屬性,都會選取最後一個取值。

自有屬性枚舉順序

基本規則是:

  1. 全部數字鍵按升序排序
  2. 全部字符串鍵按照它們被加入的對象的順序排序
  3. 全部Symbol鍵按照它們被加入對象的順序排序

加強對象原型

改變對象原型

添加與Object.getPrototypeOf()相對的Object.setPrototypeOf()方法,用於設置目標對象的__proto__(或理解爲[[Prototype]])。

簡化原型訪問的super引用

super引用至關於指向對象原型的指針,實際上也就是Object.getPrototypeOf(this)的返回值。

super.fn()等效於Object.getPrototypeOf(this).fn.call(this)。

super是靜態的,老是指向正確的對象,因此不須要擔憂運行時的特性。

正式的方法定義

super的全部引用都經過[[HomeObject]]屬性來肯定後續的運行過程。第一步是在[[HomeObject]]屬性上調用Object.getPrototypeOf()方法來檢索原型的引用;而後搜尋原型鏈,找到同名函數;最後,設置this綁定而且調用相應的方法。

相關文章
相關標籤/搜索