2012-04-21 9 views
7

Sto imparando su prototipi Javascript e ha fatto un violino (http://jsfiddle.net/3MuZa/1/) con questo javascript:Perché console nota che ho modificato il mio prototipo prima di me?

function Animal(name, sound) { 
    this.name = name; 
    this.sound = sound; 
} 

var dog = new Animal("Dog", "Bark"); 
console.debug(dog.__proto__); 

Animal.prototype.makeSound = function() {console.log(this.sound);}; 

È interessante notare che, console.debug(dog.__proto__); rivela che makeSound è un metodo del prototipo della classe Animal.

Tuttavia, aggiungo quel metodo al prototipo in una riga successiva. Perché Console rileva che il prototipo ha un metodo makeSound se il flusso di controllo non è ancora arrivato nel mio codice?

+2

Impostare un punto di interruzione su quest'ultima riga. Esegui a quel punto di rottura. Ispeziona la console. Vedrai che 'makeSound' non è presente. –

+0

Grazie! In effetti, impostare un punto di interruzione ed esaminare le variabili locali rivela che il metodo 'makeSound' non esiste. –

risposta

6

La console è "live". anche se lo si registra per primo, rifletterà le modifiche successive.

Per quanto ne so, si comporta così su oggetti, funzioni, array. Ma se si registrano stringhe, booleani e numeri, stampano cosa significano nel momento in cui sono stati registrati.

+0

Se si modifica 'console.debug' in' console.log', funziona come previsto. –

+0

@JamesMcLaughlin Cosa intendi con "come previsto"? Non vedo alcuna differenza tra debug e log. –

+0

Grazie, lo stesso qui. Non penso di vedere una differenza. –

Problemi correlati