搜尋演算法
重要性: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
中找到)。 - 回答問題:使用
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
中),下次會直接在那裡搜尋。如果發生變更,他們也夠聰明地更新內部快取,因此最佳化是安全的。