搜索算法
重要性: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
中),下次就会直接在那里搜索。它们也足够聪明,可以在发生变化时更新内部缓存,以确保优化安全。