torna alle lezioni

Algoritmo di ricerca

importanza: 5

Il task è suddiviso in due parti.

Dati i seguenti oggetti:

let head = {
  glasses: 1
};

let table = {
  pen: 3
};

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

let pockets = {
  money: 2000
};
  1. Utilizza __proto__ per assegnare il prototypes in modo che la catena segua il percorso: pocketsbedtablehead. Ad esempio, pockets.pen dovrebbe essere 3 (in table), e bed.glasses dovrebbe essere 1 (in head).
  2. Rispondi alla domanda: è più veloce ottenere glasses come pockets.glasses o come head.glasses? Eseguite test se necessario.
  1. Aggiungiamo __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. Nei moderni engine, che valutano la performance, non c’è alcuna differenza tra il prelevare una proprietà dall’oggetto oppure direttamente dal suo prototype. Sono in grado di ricordare da dove è stata presa la proprietà e riutilizzarla alla prossima richiesta.

    Ad esempio, per pockets.glasses ricordano dove hanno trovato glasses (in head), quindi la prossima volta la cercheranno proprio li. Sono anche abbastanza intelligenti da aggiornare la cache interna nel caso qualcosa cambi, quindi questa ottimizzazione è sicura.