レッスンに戻る

検索アルゴリズム

重要性: 5

このタスクは2つのパートを持っています。

オブジェクトがあります:

let head = {
  glasses: 1
};

let table = {
  pen: 3
};

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

let pockets = {
  money: 2000
};
  1. __proto__ を使って、プロパティの参照が次のパスに従うようプロトタイプを割り当てます: pocketsbedtablehead. 例えば、pockets.pen3 (table にある), で bed.glasses1 (head にある)です。
  2. 質問に答えてください: glasses を取得するのに pocket.glasses がより速いですか?それとも head.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 の中)がどこにあるのかを覚えていて、次回そこをすぐに探します。また、何か変更があった場合に内部キャッシュを更新するには十分賢いので、最適化は安全です。