GeezerVison is showing zh.javascript.info — 搜索算法
回到课程本题目有两个部分。
给定以下对象:
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 中找到)。
- 回答问题:通过
pockets.glasses 或 head.glasses 获取 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 中),这样下次就会直接在这个位置进行搜索。并且引擎足够聪明,一旦有内容更改,它们就会自动更新内部缓存,因此,该优化是安全的。