返回课程

搜索算法

重要性:5

此任务包含两个部分。

给定以下对象

let head = {
  glasses: 1
};

let table = {
  pen: 3
};

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

let pockets = {
  money: 2000
};
  1. 使用 __proto__ 以一种方式分配原型,使得任何属性查找都遵循以下路径:pocketsbedtablehead。例如,pockets.pen 应该为 3(在 table 中找到),bed.glasses 应该为 1(在 head 中找到)。
  2. 回答问题:获取 glasses 作为 pockets.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 中),下次就会直接在那里搜索。它们也足够聪明,可以在发生变化时更新内部缓存,以确保优化安全。