理解 ECMAScript 規範,第 4 部份
· 閱讀時間約 7 分鐘
讓我們來多練習一些我們驚人的規範閱讀技巧。如果你還沒看過上一集,現在是個好機會!
了解規範的一個有趣的方法是從我們已知的 JavaScript 功能入手,找出它是如何被規範定義的。
警告!本集包含來自 ECMAScript 規範(截至 2020 年 2 月)的複製粘貼算法,最終它們可能會過時。
我們知道屬性會在原型鏈中查找:如果一個物件沒有我們試圖讀取的屬性,我們會沿著原型鏈往上找到它(或找到一個不再有原型的物件)。
例如:
const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99
讓我們嘗試找出這種行為的定義位置。一個不錯的起點是 物件內部方法清單。
這裡既有 [[GetOwnProperty]]
也有 [[Get]]
——我們關心的是不限於 自有 屬性的版本,所以我們選擇 [[Get]]
。
不幸的是,屬性描述符的規範類型 也有一個名為 [[Get]]
的欄位,因此在瀏覽規範時,我們需要小心區分這兩種不同的用法。
在本文中,我們採用規範中的一個簡單函數,並嘗試理解其標記法。讓我們開始吧!
即使您了解 JavaScript,也可能會覺得閱讀其語言規範,ECMAScript 語言規範,或簡稱 ECMAScript 規範,相當令人生畏。至少這是我第一次閱讀時的感受。