回到课程
本资料仅提供以下语言版本:English, 日本語。请 帮助我们 将其翻译为 简体中文 版本。

搜索算法

重要程度: 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 中)的地方,这样下次就会直接在之前的地方搜索。一旦有内容更改,它们也会自动更新内容缓存,因此这样的优化是安全的。