Вернуться к уроку

Алгоритм для поиска

важность: 5

Есть объекты:

var head = {
  glasses: 1
};

var table = {
  pen: 3
};

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

var pockets = {
  money: 2000
};

Задание состоит из двух частей:

  1. Присвойте объектам ссылки __proto__ так, чтобы любой поиск чего-либо шёл по алгоритму pockets -> bed -> table -> head.

    То есть pockets.pen == 3, bed.glasses == 1, но table.money == undefined.

  2. После этого ответьте на вопрос, как быстрее искать glasses: обращением к pockets.glasses или head.glasses? Попробуйте протестировать.

  1. Расставим __proto__:

    var head = {
      glasses: 1
    };
    
    var table = {
      pen: 3
    };
    table.__proto__ = head;
    
    var bed = {
      sheet: 1,
      pillow: 2
    };
    bed.__proto__ = table;
    
    var pockets = {
      money: 2000
    };
    pockets.__proto__ = bed;
    
    alert( pockets.pen ); // 3
    alert( bed.glasses ); // 1
    alert( table.money ); // undefined
  2. В современных браузерах, с точки зрения производительности, нет разницы, брать свойство из объекта или прототипа. Они запоминают, где было найдено свойство и в следующий раз при запросе, к примеру, pockets.glasses начнут искать сразу в прототипе (head).