返回課程

搜尋演算法

重要性:5

此作業分為兩部分。

給定下列物件

let head = {
  glasses: 1
};

let table = {
  pen: 3
};

let bed = {
  sheet: 1,
  pillow: 2
};

let pockets = {
  money: 2000
};
  1. 使用 __proto__ 指派原型,讓任何屬性查詢都會遵循路徑:pocketsbedtablehead。例如,pockets.pen 應該是 3(在 table 中找到),而 bed.glasses 應該是 1(在 head 中找到)。
  2. 回答問題:使用 pockets.glasseshead.glasses 取得 glasses 哪個比較快?如有需要,請進行效能測試。
  1. 讓我們加入 __proto__

    let head = {
      glasses: 1
    };
    
    let table = {
      pen: 3,
      __proto__: head
    };
    
    let bed = {
      sheet: 1,
      pillow: 2,
      __proto__: table
    };
    
    let pockets = {
      money: 2000,
      __proto__: bed
    };
    
    alert( pockets.pen ); // 3
    alert( bed.glasses ); // 1
    alert( table.money ); // undefined
  2. 在現代引擎中,從效能角度來看,我們從物件或其原型取得屬性並沒有差別。它們會記住屬性在哪裡找到,並在下次請求時重複使用。

    例如,對於 pockets.glasses,他們會記住找到 glasses 的位置(在 head 中),下次會直接在那裡搜尋。如果發生變更,他們也夠聰明地更新內部快取,因此最佳化是安全的。