Алгоритм поиска
важность: 5
Задача состоит из двух частей.
У нас есть объекты:
let head = {
glasses: 1
};
let table = {
pen: 3
};
let bed = {
sheet: 1,
pillow: 2
};
let pockets = {
money: 2000
};
- С помощью свойства
__proto__
задайте прототипы так, чтобы поиск любого свойства выполнялся по следующему пути:pockets
→bed
→table
→head
. Например,pockets.pen
должно возвращать значение3
(найденное вtable
), аbed.glasses
– значение1
(найденное вhead
). - Ответьте на вопрос: как быстрее получить значение
glasses
– черезpockets.glasses
или черезhead.glasses
? При необходимости составьте цепочки поиска и сравните их.
-
Добавим свойство
__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
-
С точки зрения производительности, для современных движков неважно, откуда берётся свойство – из объекта или из прототипа. Они запоминают, где было найдено свойство, и повторно используют его в следующем запросе.
Например, при обращении к
pockets.glasses
они запомнят, что нашлиglasses
вhead
, и в следующий раз будут искать там же. Они достаточно умны, чтобы при изменениях обновлять внутренний кеш, поэтому такая оптимизация безопасна.