Алгоритм поиска
важность: 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
, и в следующий раз будут искать там же. Они достаточно умны, чтобы при изменениях обновлять внутренний кеш, поэтому такая оптимизация безопасна.