2012-04-21 12 views
7

estoy aprendiendo sobre prototipos de Javascript e hizo un violín (http://jsfiddle.net/3MuZa/1/) con este javascript:¿Por qué la consola señala que he cambiado mi prototipo antes que yo?

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);}; 

Curiosamente, console.debug(dog.__proto__); revela que makeSound es un método del prototipo de la clase de animal.

Sin embargo, agrego ese método al prototipo en una línea posterior. ¿Por qué la consola señala que el prototipo tiene un método makeSound si el flujo de control aún no se había incorporado a mi código?

+2

Establezca un punto de interrupción en esa última línea. Ejecutar a ese punto de ruptura. Inspecciona la consola. Verás que 'makeSound' no está presente. –

+0

¡Gracias! De hecho, establecer un punto de interrupción y examinar las variables locales revela que el método 'makeSound' no existe. –

Respuesta

6

La consola está "en vivo". incluso si lo registra primero, reflejará los cambios posteriores.

Por lo que yo sé, se comporta así en objetos, funciones, matrices. Pero si registra cadenas, booleanos y números, imprimen lo que significan en el momento en que se registraron.

+0

Si cambia el 'console.debug' a' console.log' funciona como se esperaba. –

+0

@JamesMcLaughlin ¿Qué quiere decir con "como se espera"? No veo diferencia entre depuración y registro. –

+0

Gracias, lo mismo aquí. No creo que vea una diferencia. –

Cuestiones relacionadas